一 分析步骤和过程
我们需要实现的是当有一个未接来电和未读短信时,Launcher界面的Dialer和Msm的icon能够显示未读条数,其实和微信的差不多。里面有一个功能就是显示未读新闻的条数
步入正题,首先未接电话和未读短信都会插入都各自的数据库中,未读短信会插入到短信的数据库中,我们只需要监听数据库的变化,如果有未读短信插入数据库我们就更新Launcher界面的Msm的ICON来重新绘制ICON来显示所需要的东西。
1 首先我们监听各自的数据库,我们可以在Launcher的onCreate里做此操作代码如下分析:
private MissedCallContentObserver mMissedCallContentObserver;
private NewMmsContentObserver mNewMmsContentObserver
mMissedCallContentObserver = new MissedCallContentObserver(getApplicationContext(), new Handler());
getContentResolver().registerContentObserver(CallLog.Calls.CONTENT_URI, true, mMissedCallContentObserver);
mNewMmsContentObserver = new NewMmsContentObserver(getApplicationContext(), new Handler());
getContentResolver().registerContentObserver(Uri.parse("content://mms-sms/"), true, mNewMmsContentObserver ; );
我们完成注册后对应的onDestory里就有如下:
getContentResolver().unregisterContentObserver(mMissedCallContentObserver);
getContentResolver().unregisterContentObserver(mNewMmsContentObserver);
这个是监听未接来电数据库的变化具体看MissedCallContentObserver当数据库有数据变化是会执行对应的方法,这个监听者模式我就不详细介绍了,大家都是明白的也经常会用到此功能的具体实现如下:
public class MissedCallContentObserver extends ContentObserver {
public MissedCallContentObserver(Context context, Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange) {
mIconHandler.sendEmptyMessageDelayed(MSG_REFRESH_LAUNCHER, ICON_MSG_DELAYED);
}
}
这个是监听未接来电的方法,我们在看下未读短信的监听
public class NewMmsContentObserver extends ContentObserver{
public NewMmsContentObserver(Context context, Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange){
mIconHandler.sendEmptyMessageDelayed(MSG_REFRESH_LAUNCHER,ICON_MSG_DELAYED);
}
}