
---【contact分析】
文章平均质量分 91
Achillisjack
这个作者很懒,什么都没留下…
展开
-
SIM卡 --- 联系人增加/删除/更新 分析
3.2 更新insert/ delete/ update 三个方法执行的流程几乎完全相同,以update方法为例进行论述。update方法主要逻辑如下,1,根据不同类型为参数赋值,case ADN: efType = IccConstants.EF_ADN; subId = SubscriptionManager.getDefaultSubId();break;原创 2018-01-05 19:23:18 · 1848 阅读 · 0 评论 -
SIM卡 --- 联系人查询过程回调处理
1.2回调处理回调主要是通过消息的形式,首先是IccFileHandler的EVENT_EFEXT1_LINEAR_RECORD_SIZE_DONE 消息,然后是AdnRecordCache的EVENT_LOAD_ALL_ADN_LIKE_DONE消息,最后处理IccPhoneBookInterfaceManager的EVENT_LOAD_DONE消息时唤醒子线程。 回调处理的原创 2018-01-05 19:19:13 · 717 阅读 · 0 评论 -
SIM卡 --- 联系人查询过程分析
6.3 联系人操作在前面已经论述过, SIM卡中的联系人是保存在单独的数据库中,其对应的Provider为IccProvider,在packages\services\Telephony 路径下,也就是phone进程中。并且,增删改查直接看jar包中的IccProvider类就可以了, IccProvider路径如下,frameworks/opt/telephony/src/java/co原创 2018-01-05 19:14:16 · 1796 阅读 · 0 评论 -
SIM卡 --- IccCardProxy
6.2 IccCardProxy在phone进程初始化过程中, PhoneProxy的构造方法中会构造IccCardProxy对象,mIccCardProxy = new IccCardProxy(mContext, mCommandsInterface, mActivePhone.getPhoneId());IccCardProxy的构造方法注册SIM卡状态变化的代码如下,mUi原创 2018-01-04 22:11:32 · 1149 阅读 · 0 评论 -
SIM卡 --- 状态变化
6,SIM卡SIM卡主要的内容包括,SIM卡信息的状态的变化。其中,状态的变化主要是从Modem到RIL守护进程最后上报给phone进程的RIL.java的。6.1 状态变化SIM卡状态的变化主要通过UiccController,这个类在phone进程初始化的时候会进行初始化。UiccController的构造方法如下,mContext = c; //进程上下文mCis =原创 2018-01-04 22:02:42 · 8428 阅读 · 0 评论 -
合并联系人分析 --- 之二
一键合并联系人的MergeContacts方法调用流程图如下,MergeContacts方法如下,mMergeTask = new QueryContactDetailAndMergeTask(this);mMergeTask.execute(mSubGroupContactsIds);构造QueryContactDetailAndMergeTask对象并调用execu原创 2018-01-04 21:59:18 · 1662 阅读 · 0 评论 -
合并联系人分析 --- 之一
5.2显示查询完成之后, QuerypartRepeartContactsTask 的onPostExecute方法调用流程图如下,onPostExecute方法主要逻辑如下,((MergeallActivity)target).updateAdapterData(result);MergeallActivity的updateAdapterData方法如下,mAda原创 2018-01-04 21:52:27 · 1019 阅读 · 0 评论 -
联系人合并分析 --- 查找
5,合并联系人合并联系人有2个界面,只是一个是自动合并,一个是手动合并而已,查询以及合并流程完全相同。界面如下,架构图如下,5.1 查找过程MergeallActivity是在PeopleActivity中启动的,startActivity(new Intent(PeopleActivity.this, MergeallActivity.class));原创 2018-01-04 21:45:38 · 1205 阅读 · 0 评论 -
数据库中同步SIM卡联系人
4.2 同步联系人当重新插入SIM卡时, SimContactsService 的onCreate方法内的匿名Handler的handleMessage方法对应的处理如下,case MSG_SIM_REFRESH:•••if (mSimState[sub] == SimContactsConstants.SIM_STATE_READY || mSimState[sub] == S原创 2018-01-04 21:34:25 · 1661 阅读 · 0 评论 -
数据库中删除SIM卡联系人
4,SIM卡联系人Contacts2.db数据库中联系人其实包括2部分,手机上面的联系人以及SIM卡中的联系人。当然, SIM卡中的联系人是保存在单独的数据库中,其对应的Provider为IccProvider,在packages\services\Telephony 路径下,也就是phone进程中。AndroidManifest.xml对应的定义如下,<provider andr原创 2018-01-04 21:27:56 · 2619 阅读 · 0 评论 -
MultiPickContactActivity 分析 --- 之二
3.3选择有2种选择方式,逐条选择和全选。逐条选择时,会调用onListItemClick方法,MultiPickContactActivity的onListItemClick方法逻辑如下,1,获取CheckBox的选取状态,CheckBox checkBox = (CheckBox) v.findViewById(R.id.pick_contact_check);boolean原创 2018-01-03 22:35:55 · 515 阅读 · 0 评论 -
MultiPickContactActivity 分析 --- 之一
4.3 MultiPickContactActivity首先,这个类长达2000多行,写的的确好。主要是将几个相似的功能合在一起,因此使用了大量的if选择。在AndroidManifest.xml中,有关 MultiPickContactActivity配置如下,<activity android:name=".activities.MultiPickContactActivity"原创 2018-01-03 22:29:46 · 1163 阅读 · 0 评论 -
联系人导入导出分析
4,导入导出单卡的导入导出界面如下,导出到SIM卡的过程界面如下,在联系人主界面(PeopleActivity)点击右上角的导入导出菜单, 就会出现界面1, PeopleActivity 的onOptionsItemSelected方法对导入导出菜单的点击事件处理如下,case R.id.menu_import_export: { ImportExpor原创 2018-01-03 22:23:45 · 2956 阅读 · 0 评论 -
ContactSaveService分析
3.3 ContactSaveServiceContactSaveService类继承自IntentService,实现了onHandleIntent方法。当然,另开一个子线程执行异步任务,主要对联系人(包括手机联系人和SIM卡联系人)进行添加,删除,修改,合并等操作。AndroidManifest.xml有关ContactSaveService配置如下,<service andr原创 2018-01-03 22:02:05 · 763 阅读 · 0 评论 -
删除联系人分析
3.2 删除联系人Contacts相关模块中,有很多地方可以删除联系人,并且有单个删除联系人也有多个删除联系人。以QuickContactActivity为例论述删除单个联系人的详细流程, QuickContactActivity的界面如下,QuickContactActivity界面点击Delete菜单时,会弹出一个对话框,点击对话框的OK才会删除该联系人。QuickCo原创 2018-01-03 21:53:32 · 928 阅读 · 0 评论 -
新建联系人分析
3,联系人编辑3.1 新建联系人新建联系人界面如下,对应的activity为CompactContactEditorActivity,在CompactContactEditorActivity的onCreate方法中,mFragment = (CompactContactEditorFragment) getFragmentManager().findFragmentB原创 2018-01-03 21:52:58 · 2127 阅读 · 0 评论 -
contact 结果显示
7.结果显示 问题:1,加载联系人时,联系人前面有 A,B,C等等,查询时的结果都没有 2,联系人前面ABC的大写字母颜色不一样 3,加载联系人仅显示姓名,Dialer查询时还会显示号码,Contacts查询时, 如果邮箱和号码匹配,才显示,否则仅仅显示姓名。什么,邮箱也可以查询?7.1联系人前面的ABC字符字符查询流程Conta原创 2018-01-03 21:43:33 · 1851 阅读 · 0 评论 -
查询关键代码解析
5,查询关键代码解析bindView ( )ContactEntryListAdapter.java 疑惑1: 在bindView( )函数中,直接将itemView 直接转化为 ContactListItemView?解答:在父类 CompositeCursorAdapter 的 getview 函数中,首先调用 newView() 然后才调用 bind原创 2018-01-03 18:57:07 · 1170 阅读 · 0 评论 -
contact 基础知识总结与类图
4.基础知识总结与类图三要素基本关系如下:Fragment(Activity),LoaderManager, AsyncLoader等类Fragment1,创建并且管理LoaderManager: getLoaderManager().initLoader(i, null,this);2, 实现的LoaderManager回调callback接口函数:原创 2018-01-03 18:56:04 · 1742 阅读 · 0 评论 -
contacts加载联系人分析
3,contacts加载联系人Contacts加载和搜索联系人都是同一个MultiSelectContactsListFragment。架构图如下,3.1 初始化MultiSelectContactsListFragment的createListAdapter方法如下,DefaultContactListAdapter adapter = new MultiSele原创 2018-01-03 18:19:52 · 1412 阅读 · 0 评论 -
拨号盘搜索联系人
2,拨号盘搜索联系人拨号盘搜索联系人流程图如下,拨号界面对应的fragment为DialpadFragment,并且DialpadFragment实现了TextWatcher接口,afterTextChanged方法如下,if (mDialpadQueryListener != null) { mDialpadQueryListener.onDialpadQuer原创 2018-01-02 22:46:05 · 2403 阅读 · 0 评论 -
拨号盘搜索联系人数据库更新分析 --- 之一
1,拨号盘搜索联系人数据库更新在论述拨号盘搜索联系人之前,首先看下dialer.db数据库的更新, dialer.db数据库路径如下,一般在data/data 目录下。dialer.db 数据库有4个表单,主要看smartdial_table和prefix_table 2个表单,smartdial_table是联系人信息,包括手机和SIM卡的联系人;pref原创 2018-01-02 22:30:17 · 827 阅读 · 0 评论 -
联系人界面分析
2.3联系人界面其实,原生android 系统中,一共有2个联系人显示界面,2个联系人搜索界面,分别属于dialer和contacts中。在Dialer的拨号盘界面如下,可以进行模糊匹配的方法进行搜索,1,例如,输入1时,会搜索出所有号码为1开头的联系人。2,例如,输入6时,不仅会搜索出所有号码为1开头的联系人,还会搜索出联系人首字母为M,N,O的联系人信息原创 2018-01-02 22:21:08 · 1222 阅读 · 0 评论 -
Dialer 联系人加载
2,联系人加载联系人加载主要是Dialer中的联系人加载,界面如下,界面对应的Fragment为AllContactsFragment,在ListsFragment的内部类ViewPagerAdapter的getItem方法部分代码如下,case TAB_INDEX_ALL_CONTACTS: mAllContactsFragment = new AllContac原创 2018-01-02 22:04:47 · 1345 阅读 · 0 评论 -
通话记录分析 --- 删除 之二
6.2删除通话记录当点击确认按钮时,就开始删除选择的通话记录。MultiPickContactActivity的onClick对MODE_DEFAULT_CALL模式处理如下,showDialog(DIALOG_DEL_CALL);调用流程图如下,MultiPickContactActivity的onCreateDialog对DIALOG_DEL_CALL类型处理如下,原创 2018-01-02 18:30:55 · 1344 阅读 · 0 评论 -
通话记录分析 --- 删除 之一
1.6 批量删除在CallLogActivity中进入批量删除界面的onOptionsItemSelected方法如下,case R.id.delete_all: onDeleteCallLog(); return true;onDeleteCallLog方法如下,startActivity(new Intent(SimContactsConstants.ACTI原创 2018-01-02 18:30:44 · 912 阅读 · 0 评论 -
通话记录分析 --- 通话详情 之二
5.2 通话详情界面在通话详情界面,主要是完成2个功能,展示通话详情,删除该条通话记录。CallDetailActivity界面如下,1,通话记录详情CallDetailActivity的onCreate方法主要是加载界面布局。主要在onResume方法中调用异步线程查询通话信息,调用流程图如下,CallDetailActivity的onResume原创 2018-01-02 18:30:13 · 3489 阅读 · 0 评论 -
通话记录分析 --- 通话详情 之一
1.5 详情点击通话记录的item,下面会弹出一些选项,例如,为该通话记录新建一个联系人,添加一个联系人,发送短信,或者查看通话详情。在此主要看通话详情的实现。5.1 intent添加通话详情的intent调用流程图如下,CallLogListItemViewHolder的showActions方法主要逻辑如下,1,设置界面可见,inflateAct原创 2018-01-02 18:30:02 · 7307 阅读 · 2 评论 -
通话记录分析 --- 界面刷新
1.4,界面刷新在此介绍2中复杂界面的刷新过程, ListView和RecyclerView。4.1 ListView在界面刷新时,会调用View的onLayout方法,对于ListView,就会调用父类AbsListView的onLayout方法,中间的过程以及种种方法在此不论述了,流程图如下,在AbsListView的obtainView方法中,会调用ListAda原创 2018-01-02 18:29:09 · 728 阅读 · 0 评论 -
通话记录分析 --- CallLogAdapter交互
1.3 和CallLogAdapter交互Fragment和Adapter交互的架构如下,监听器Listener是CallLogQueryHandler的内部接口,仅有2个方法,public interface Listener { /** Called when {@link CallLogQueryHandler#fetchVoicemailStatus()}原创 2018-01-01 18:45:12 · 1609 阅读 · 0 评论 -
通话记录分析 --- 查询
1.2 查询通话记录CallLogFragment的fetchCalls调用流程图如下,fetchCalls方法如下,public void fetchCalls() { mCallLogQueryHandler.fetchCalls(mCallTypeFilter, mDateLimit);}CallLogQueryHandler有不同参数的fetchCal原创 2018-01-01 18:29:30 · 755 阅读 · 0 评论 -
通话记录分析 --- 初始化
1.1,初始化1.1 CallLogFragment在Dialer中,通话记录信息都是通过CallLogActivity 显示,实际上,真正完成的是CallLogFragment 。CallLogActivity的内部类ViewPagerAdapter的getItem方法如下,public Fragment getItem(int position) { switch (ge原创 2018-01-01 18:28:51 · 1124 阅读 · 0 评论 -
通话记录分析 --- 界面
1,通话记录在android 系统中,和通话记录相关的有4个界面,还有一些其他功能。第一个界面是dialer启动之后的三个界面之一的通话记录,这三个界面分别是收藏的联系人/通话记录/所有联系人。是DialtactsActivity对应的Fragment为CallLogFragment,通过ListsFragment实现的, ListsFragment的getIt原创 2018-01-01 18:03:58 · 2971 阅读 · 0 评论