首页 > 代码库 > android闹钟小案例之功能阐述

android闹钟小案例之功能阐述

  最近花了一个星期左右的时间做了一个小闹钟,现在回过头来进行总结下。刚开始接触这个案例,总体觉着没有太大的难度,都是一些基础知识的堆砌,可现实总比理想残酷啊,这几天下来,每天都会有意料之外的bug出现。在debug的过程中,深深体会到了百度一下和谷歌谷歌的用处,基本常见的问题都可以在这里得到提示甚至答案。这篇文章先来介绍下这个案例所实现的功能,接下来再用几遍文章记录所用到的知识点。

  功能简介:

    1.闹钟基本功能:和平时的闹钟一样,用户在界面选择闹钟响起的时间,到达所设定时间后执行相应的指定操作。

      该功能主要通过一个TimePicker

public void onTimeChanged(TimePicker view, int hour_of_day, int minutes) {            // TODO Auto-generated method stub            calendar.setTimeInMillis(System.currentTimeMillis());//将timePciker的当前时间转换为Calender对象            calendar.set(Calendar.HOUR_OF_DAY,hour_of_day);//设置小时            calendar.set(Calendar.MINUTE,minutes);//设置分钟            calendar.set(Calendar.SECOND,0);//设置秒            calendar.set(Calendar.MILLISECOND,0);//设置毫秒            hour=hour_of_day;//保存设置的小时            minute=minutes;//保存设置的分钟        }

和PendingIntent以及BrocardcastReceiver来实现。

PendingIntent sender=PendingIntent.getBroadcast(MainActivity.this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);//指定PendingIntent

   

 2.自定义铃声功能:用户可以浏览SD卡上所有的音频文件,并可以通过单击其喜欢的歌曲将其设定为闹钟响起时的铃声。

      该功能主要通过Cursor查询媒体数据库来实现

//查询媒体数据库        Cursor cursor=MainActivity.this.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,                 null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);        //遍历数据库        if(cursor.moveToFirst())        {            while(!cursor.isAfterLast())            {                int id=cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID));//获取歌曲编号                int trackid=cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID));//获取歌曲ID                String album=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));//获取歌曲专辑名                String artist=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));//获取歌曲歌手名                String url=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));//获取歌曲路径                String duration=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));//获取歌曲播放时长                int size=cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE));//获取歌曲大小                String disName=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME));//获取歌曲文件显示名字                items.add(disName);                urls.add(url);//保存歌曲路径                cursor.moveToNext();            }            cursor.close();        }

    3.录制铃声功能:用户不但可以选择SD卡已有的音频文件作为闹钟铃声,还可以自行录制音频文件作为闹钟的铃声。

      该功能主要通过调用MediaRecorder类来实现:

mRecorder=new MediaRecorder();        //设置音频源为Micphone        mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);        //设置封装格式        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);        mRecorder.setOutputFile(mFileName);        //设置编码格式        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

    4.关闭闹钟关卡:当闹钟响起,用户希望关闭闹钟时,必须先正确回答一道题目才能正常关闭闹钟。

      该功能主要通过预定义字符串数组,随机显示数组元素来实现:

rm = (int) (Math.random()*3);//生成一个随机数        questionView.setText("请回答以下问题:"+question[rm]);        if(!(answerText.getText().toString()==null))//equals比较两个值的内容是否相同,==比较两个值的首地址是否相同                    {            stopButton.setEnabled(true);        }

    5.微博分享功能:集成了新浪微博的微博分享功能,用户可以将类似“我今天又按时起床啦!”这样的信息分享到微博上。

      该功能分两步实现,一个是微博授权认证功能:

//创建微博实例,传入APP_KEY,REDIRECT_URL等信息        mWeiboAuth=new WeiboAuth(this,Constants.APP_KEY,Constants.REDIRECT_URL,Constants.SCOPE);        //从SharedPreferences读取AccessToken信息        mAccessToken=AccessTokenKeeper.readAccessToken(this);        //如果AccessToken已存在并可用                if(mAccessToken.isSessionValid())        {            updateTokenView(true);        }        else{            mSsoHandler=new SsoHandler(AlarmMessage.this,mWeiboAuth);            mSsoHandler.authorize(new AuthListener());        }

   另一个是调用微博分享API:

//创建微博分享接口实例            mWeiboShareAPI=WeiboShareSDK.createWeiboAPI(this, Constants.APP_KEY);            try            {    //检测用户设备是否已微博客户端                if(mWeiboShareAPI.checkEnvironment(true)){                //注册第三方应用到微博客户端                    mWeiboShareAPI.registerApp();                    if(mWeiboShareAPI.isWeiboAppSupportAPI())                    {                        int supportApi=mWeiboShareAPI.getWeiboAppSupportAPI();                        if(supportApi>=10351)                        {                            //初始化微博的分享信息                            WeiboMultiMessage weiboMessage=new WeiboMultiMessage();                            weiboMessage.textObject=getTextObj();                            //初始化第三方到微博的消息请求                            SendMultiMessageToWeiboRequest request=new SendMultiMessageToWeiboRequest();                            //用transaction唯一标识一个请求                            request.transaction=String.valueOf(System.currentTimeMillis());                            request.multiMessage=weiboMessage;                            //发送请求,唤起微博分享界面                            mWeiboShareAPI.sendRequest(request);                            //Toast.makeText(AlarmMessage.this,"分享成功!55", Toast.LENGTH_LONG).show();                                                    }                }                }

 最后附上几张应用截图: