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

     最后附上几张应用截图:

      

  • 相关阅读:
    TestNG 入门教程
    Angularjs中文版本开发指南发布
    你是码农 还是优秀程序员?
    java牛人给新人的几点建议
    有一种毒药叫励志书
    牛人眼中如何精通spring?
    驯服你的Windows Server 2003
    windows 7 里面的iis在哪里
    神器 cmder
    亚信UED前端流程自动化构建工具
  • 原文地址:https://www.cnblogs.com/dream550/p/3871803.html
Copyright © 2020-2023  润新知