`
long_yu2
  • 浏览: 311164 次
社区版块
存档分类
最新评论

Android闹钟最终版【android源码闹钟解析】

阅读更多
我以前写了个复杂闹钟的demo,参见Android闹钟【复杂版】【大明进化十五】 .但是里面的bug有一些,好多人留言,所以我就看看源码,找找原因?顺便把源码代码整理出来,弄成一个完整的可以运行的apk,今天上午就整理了一下,才发现,源码处理的逻辑多一些,考虑的情况多,比如开机后接收一个广播,然后从数据库中取时间和当前时间对比,设置闹钟,当时区改变了,也会发送广播,对闹钟进行设置的。
        转载请标明出处:http://blog.csdn.net/wdaming1986/article/details/7461043      
        有人问我:“当设置一个闹钟后,然后调系统时间超过设置的闹钟的时间,这时候闹钟响了??”
         通过源码,我发现这种情况是正常的。不是bug。可以理解。
         以下是我发现的几点闹钟中重要的点,分享一下:
         (1)在闹钟中有AudioManager管理机制,这个机制可以申请和释放OnAudioFocusChangeListener监听。
还有mTelephonyManager对象,处理在闹钟响的时候,来电铃声的切换。
         (2)广播接收闹钟,通过广播启动AlarmKlaxon这个Service,隐式启动service:
public static final String ALARM_INTENT_EXTRA = "intent.extra.alarm";
[java] view plaincopyprint?
// Play the alarm alert and vibrate the device. 
        Intent playAlarm = new Intent(Alarms.ALARM_ALERT_ACTION); 
        playAlarm.putExtra(Alarms.ALARM_INTENT_EXTRA, alarm); 
        context.startService(playAlarm); 
   在mainfest中,AlarmKlaxon这个服务的定义如下:
[java] view plaincopyprint?
<service android:name="AlarmKlaxon" 
                android:description="@string/alarm_klaxon_service_desc" 
                > 
            <intent-filter> 
                <action android:name="com.cn.daming.deskclock.ALARM_ALERT" /> 
            </intent-filter> 
        </service> 
这个service做的是允许别的Activity打断正在响铃的铃声,播放其他的铃声,例如,闹钟响的时候来电话了。
        (3)在listview中包含checkbox,这时候闹钟的处理时,activity实现一个OnItemClickListener的监听,点击每一项的监听。然后在checkbox单独拿出去写一个类,继承LinearLayout,重写setPressed()这个方法,以实现“当点击checkbox的时候不触发parent的click事件”。关键代码如下:
[java] view plaincopyprint?
<span style="font-size:18px;"> @Override 
    public void setPressed(boolean pressed) { 
        // If the parent is pressed, do not set to pressed. 
        if (pressed && ((View) getParent()).isPressed()) { 
            return; 
        } 
        super.setPressed(pressed); 
    }</span> 

下面看看我的程序截图:
                    红色圈的图标为我的闹钟。                                         点击“玲闹钟”后的界面
                                 
                      点击新建闹钟出现的界面                                           设置好时间弹出的toast。
                                 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics