Android实现获取未接来电和未读短信数量的方法
本文实例展示了Android实现获取未接来电和未读短信数量的方法,在Android程序开发中非常常见,是非常实用的功能,现分享给大家供大家参考。具体如下:
一、未读短信
首先注册Observer,当有新短信或彩信来的时候会调用onChange方法,我们可以在onChange方法中去获取未读短信和彩信,然后做一些UI上的处理!
具体功能代码如下:
privateContentObservernewMmsContentObserver=newContentObserver(newHandler()){
publicvoidonChange(booleanselfChange){
intmNewSmsCount=getNewSmsCount()+getNewMmsCount();
}
};
privatevoidregisterObserver(){
unregisterObserver();
getContentResolver().registerContentObserver(Uri.parse("content://sms"),true,
newMmsContentObserver);
getContentResolver().registerContentObserver(MmsSms.CONTENT_URI,true,
newMmsContentObserver);
}
privatesynchronizedvoidunregisterObserver(){
try{
if(newMmsContentObserver!=null){
getContentResolver().unregisterContentObserver(newMmsContentObserver);
}
if(newMmsContentObserver!=null){
getContentResolver().unregisterContentObserver(newMmsContentObserver);
}
}catch(Exceptione){
Log.e(TAG,"unregisterObserverfail");
}
}
得到未读短信数量:
privateintgetNewSmsCount(){
intresult=0;
Cursorcsr=getContentResolver().query(Uri.parse("content://sms"),null,
"type=1andread=0",null,null);
if(csr!=null){
result=csr.getCount();
csr.close();
}
returnresult;
}
获取未读彩信数量:
privateintgetNewMmsCount(){
intresult=0;
Cursorcsr=getContentResolver().query(Uri.parse("content://mms/inbox"),
null,"read=0",null,null);
if(csr!=null){
result=csr.getCount();
csr.close();
}
returnresult;
}
二、未接来电
未接来电不能用Observer监听,不过当有新的未接来电时,系统会发送一个广播com.android.phone.NotificationMgr.MissedCall_intent(锁屏上显示的未接来电数量就是通知监听这个广播实现的)
具体功能代码如下:
finalIntentFilterfilter=newIntentFilter();
filter.addAction("com.android.phone.NotificationMgr.MissedCall_intent");
finalApplicationapplication=getApplication();
application.registerReceiver(newBroadcastReceiver(){
@Override
publicvoidonReceive(Contextcontext,Intentintent){
Stringaction=intent.getAction();
if(action!=null&&"com.android.phone.NotificationMgr.MissedCall_intent".equals(action)){
intmMissCallCount=intent.getExtras().getInt("MissedCallNumber");
}
}
},filter);
广播只是当有新的未接来电时才会发送,但是如果有旧的未接来电没有读取时,上面的广播就得不到数据了,那就必须得从数据库中查找了。
功能代码如下:
privateintreadMissCall(){
intresult=0;
Cursorcursor=getContentResolver().query(CallLog.Calls.CONTENT_URI,newString[]{
Calls.TYPE
},"type=?andnew=?",newString[]{
Calls.MISSED_TYPE+"","1"
},"datedesc");
if(cursor!=null){
result=cursor.getCount();
cursor.close();
}
returnresult;
}
相信本文所述实例对于大家的Android程序开发能起到一点参考借鉴作用。