Contact学习心得(一)
来源:互联网 发布:扩展欧几里德算法用途 编辑:程序博客网 时间:2024/06/16 20:48
最近在做一个Android手机项目,这个项目是7.0的,负责的是Contacts模块。
Contacts:又叫Phone book,源码路径:package/app/Dialer,Dialer整合了InCall,Contacts模块。
详细可以参考:http://www.cnblogs.com/lance2016/p/6107376.html
在android源码中主入口:DialtactsActivity
出于机密,就不说是什么Activity了,只是用到了android:targetActivity="xxxxxx",使用这个是关联一个目标Activity,也就是说如果有发响应Action和category,这个关联到xxxxxx的代码中去。
我这里就先不用源码做分析了
-------------------------------------------------------------------------------------------------------------------------------------------------------------
1.初次进入Dialer应用:
1.1 启动修改新进未接来电和取消未接来电的Notification的服务类
是在主入口Activity中通过handler.postDelayed()的方法,启动一个Service。该服务类是继承于IntentService,继续调用onHandleIntent()。通过onHandleIntent将之前新进
的未接来电全部变为不是New,且cancel掉之前的未接来电的Notification。
1.1.1 修改新进未接来电
查询的数据库URI:public static final Uri CONTENT_URI = Uri.parse("content://call_log/calls");
查询的数据库条件:(type = 3(未接来电) or type = 103(未接视频来电)) and new = 1(True)
1.1.2 取消未接来电的Notification的服务类
归根揭底,是用的反射机制来实现的。
具体代码如下:
当SDK>20
public void cancelMissedCallsNotification() { Class<?> clz = mTelecomManagerService.getClass(); Method method = null; try { method = clz.getMethod("cancelMissedCallsNotification", new Class<?>[]{}); if (method != null) { method.invoke(mTelecomManagerService, (Object[]) null); } } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } }
当SDK<=20
public void cancelMissedCallsNotification() { ITelephony iTelephony = ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE)); try { invoke(iTelephony, "cancelMissedCallsNotification", null, new Object[]{}); } catch (Exception e) { e.printStackTrace(); }
}
1.2 异步添加Fragment页签
为什么要异步呢?我觉得是为了功耗的考虑
0 0
- Contact学习心得(一)
- Android Contact数据模型之EntityDelta(一)
- 学习心得(一)
- 学习心得(一)
- ExtJS 学习心得(一)
- ExtJS 学习心得(一)
- JavaCC学习心得(一)
- Servlet学习心得(一)
- Hibernate学习心得(一)
- JSP学习心得(一)
- ExtJS 学习心得(一)
- JMS学习心得(一)
- RDM学习心得(一)
- Andengine学习心得(一)
- gcc学习心得(一)
- DPS学习心得(一)
- linux学习心得(一)
- C++学习心得(一)
- Android:避免toast重复弹出工具类
- SpringMVC整合fastjson
- 文字区域的提取
- php 一次环境搭建的问题 服务器错误500的思考
- mysql 查看表的类型
- Contact学习心得(一)
- svm损失和交叉熵损失
- WINDOWS窗口坐标
- 欢迎使用CSDN-markdown编辑器
- 堆排序
- C++学习计划 The C++ Programming Language
- java基础—算法设计
- as3拖拽事件
- Leetcode #463 Island Perimeter