在Android2.3中,当闹钟响起后,AlarmReceiver会收到从底层发出的ALARM_ALERT_ACTION的消息,然后起一个文件名叫AlarmKlaxon的service,以及我们所看到的闹钟界面AlarmAlertFullScreen的Activity。在这个Activity执行onResume的时候,判断是否为通话中,判断方法如下:
然后再onResume函数中进行判断,如果处于通话状态,将此Task一道后台,代码如下:
在后台的Service中启动一个监听器,监听手机挂断的动作,如果用户通话结束,此时会发送一个广播消息,用AlarmReceiver来接收这个消息:
当AlarmReceiver收到这个广播后:
我用的是2.3版本的SDK,没有尝试另外一种方法,3.0以上Android支持ActivityManager.moveTaskToFront()函数。用这个函数应该也可以,如果用这个函数,代码如下:
这样当通话结束后,之前移到后台的ALARM又会被用户看到。如果有更好的实现方式可以留言讨论,谢谢~