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();
                            
                        }
                }
                }

 最后附上几张应用截图:

  android闹钟小案例之功能阐述android闹钟小案例之功能阐述android闹钟小案例之功能阐述android闹钟小案例之功能阐述android闹钟小案例之功能阐述

android闹钟小案例之功能阐述,布布扣,bubuko.com

android闹钟小案例之功能阐述

上一篇:c/c++:回调函数


下一篇:详解Android定位