获取未接来电及新短信的小栗子(主要使用ContentObserver类)
1.ContentObserver简单介绍:
ContentObserver——内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它类似于数据库技术中的触发器(Trigger),当ContentObserver所观察的Uri发生变化时,便会触发它。
2.编程步骤:
①创建我们特定的ContentObserver派生类,必须重载父类构造方法,必须重载onChange()方法(当观察到的Uri发生变化时,回调该方法去处理),在这个方法中去做自己需要的功能
②利用context.getContentResolover()获得ContentResolove对象,接着调用registerContentObserver()方法去注册内容观察者
③由于ContentObserver的生命周期不同步于Activity和Service等,因此,在不需要时,需要手动的调用unregisterContentObserver()去取消注册。
3.下边的是自己写的一个得到未接来电的栗子:
public class MainActivity extends AppCompatActivity {public static int PHONE_NUM;private final ContentObserver mContactsObserver = new ContactsContentObserver();Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);getContentResolver().registerContentObserver(CallLog.Calls.CONTENT_URI, true, mContactsObserver);}@Overrideprotected void onDestroy() {getContentResolver().unregisterContentObserver(mContactsObserver);super.onDestroy();}private class ContactsContentObserver extends ContentObserver {public ContactsContentObserver() {super(new Handler());}@Overridepublic void onChange(boolean selfChange) { //当观察到的Uri发生变化时,回调该方法去处理Log.e("111","进入检测函数");mHandler.post(new Runnable() {@Overridepublic void run() {UpdateUnAnsweredCalls(getApplicationContext());mHandler.sendEmptyMessage(0);}});super.onChange(selfChange);}}private void UpdateUnAnsweredCalls(Context context) {Cursor cursor = null;Log.e("111","进入处理函数");if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CALL_LOG) == PackageManager.PERMISSION_GRANTED) {try {cursor = context.getContentResolver().query(CallLog.Calls.CONTENT_URI, null,"type = 3 and new = 1", null, null);if (null != cursor) {PHONE_NUM = cursor.getCount();String s = Integer.toString(PHONE_NUM);Log.e("111","未接来电数目:"+s);}} catch (Exception e) {e.printStackTrace();} finally {if (cursor != null) {cursor.close();}}return;}}
}
打印结果如下,用户点掉手机未接来电后立马更新来电数量到零:
4.详细了解ContentObserver的文章:点击打开链接
5.短信和来电的做法类似,可以直接看我自己写的demo,最后附上自己的源码,下载地址:点击打开链接
获取未接来电及新短信的小栗子(主要使用ContentObserver类)相关推荐
- android查询未读短信,Android实现获取未接来电和未读短信数量的方法
本文实例展示了Android实现获取未接来电和未读短信数量的方法,在Android程序开发中非常常见,是非常实用的功能,现分享给大家供大家参考.具体如下: 一.未读短信 首先注册Observer,当有 ...
- Android实现获取未接来电和未读短信数量的方法
项目开发需要 要求获取未接来电和未读短信的数量 1.未接来电的获取方式 通过广播com.android.phone.NotificationMgr.MissedCall_intent 接收像在锁屏界面 ...
- Android有未接来电后处理(判断未接来电)
在Android的手机状态中没有未接来电的监听器,所以如果想当手机有未接来电后进行处理,这时候就需要自己对手机的状态判断是未接来电后再进行处理. 实现思路 : 1. 继承PhoneStateListe ...
- Android Launcher界面未接来电和未读短信条数的显示
一 分析步骤和过程 我们需要实现的是当有一个未接来电和未读短信时,Launcher界面的Dialer和Msm的icon能够显示未读条数,其实和微信的差不多.里面有一个功能就是显示未读新闻的条数 步入正 ...
- Android MTK N 平台上如何在桌面上添加未接来电和未接信息数字角标
本篇博客我们来实现在桌面上添加未接来电和未接信息数字角标的功能. 想要实现这个功能,我们需要监听到未接来电/未接短信的变化,同时获取到未接来电/未接短信的数量,当监听到变化时对对应的图标进行重绘,在图 ...
- android开发笔记之锁屏界面未读短信未接来电提醒(android 4.4)
客户需求 最近在做一个项目,android 4.4系统,客户要求在锁屏界面有未读短信未接来电的提醒功能.而平台没有此功能,要自己实现.并且时间非常紧,---.(其实软件工程师基本上都是这样,坑,坑,坑 ...
- Android 10.0 Launcher3 电话和短信app图标显示未读短信和未接来电的条数
最近客户有需求要求在电话app图标显示未接来电的条数 在短信app图标上显示未读信息的条数 根据需求首选要在Launcher3的Launcher.java中,启动launcher时,查询未读短信和未接 ...
- Android 11.0 12.0Launcher3 电话和短信app图标显示未读短信和未接来电的条数
在11.0 12.0产品开发中,最近客户有需求要求在电话app图标显示未接来电的条数 在短信app图标上显示未读信息的条数 根据需求首选要在Launcher3的Launcher.java中,启动lau ...
- Android 12.0Launcher3 电话和短信app图标显示未读短信和未接来电的条数
1.概述 在12.0产品开发中,最近客户有需求要求在电话app图标显示未接来电的条数 在短信app图标上显示未读信息的条数 根据需求首选要在Launcher3的Launcher.java中,启动lau ...
最新文章
- Core开发组的傲娇造就了今天的以太坊和比特币现金(BCH)
- python处理完数据导入数据库_python操作数据库之批量导入
- java 录屏_java 录屏 小工具源码(idea)
- mysql 多线程并行复制_【MySQL】开启并行复制
- SuperTuxKart 0.10 测试版发布
- [命令模式]在游戏开发中的应用
- lonlifeOJ1152 “玲珑杯”ACM比赛 Round #19 概率DP
- codeforces 597C (树状数组+DP)
- vue安装vue-pdf(预览pdf)
- java 查看jar包内容_jar文件怎么打开?如何查看jar文件内容?
- 第十届泰迪杯数据挖掘大赛B题电力系统负荷预测
- ipad上的html编辑器,它让我开始尝试在 iPad 上写作:MWeb for iOS 使用体验
- win7升级sp1包
- 获取文件哈希值_Java 获得文件的指纹
- WinKawaks详尽使用说明
- HTML语言源代码实例
- IM即时通讯-项目框架搭建(二)
- 人生就是不断地战斗。 --王者荣耀之宫本武藏
- 雨中拍照:廉价好用的自制伞架
- Python sklearn 分类效果评估