对于Android手机来说,通信是一大块功能。APP层包括联系人、短信、拨号、InCallUI。framework层包括Telephony、Telecom、PhoneGlobal、RIL等,底层又涉及到通信模块,AT命令等,几大功能互相独立却又缠绕在一起,想要了解透彻非常复杂。
希望再接下来半年时间内能把这一块吃透
当然要吧整体的流程和架构了解清楚,但是想要做这一领域的专家,光这些还不够,关注一些具体的功能点,可以更加方便的理解和解决实际的问题,也能更好的理解流程和架构的设计思路,而且方便进行分析
最近解一个将手机联系人导入到SD卡失败的问题,特将分析思路整理如下
一、涉及主要文件
PeopleActivity.java
ContactsPreferenceActivity.java DisplayOptionsPreferenceFragment.java
ContactImportExportActivity.java
ContactListMultiChoiceActivity.java MultiDuplicationPickerFragment.java
ExportVCardActivity.java
VCardService.java
ExportProcessor.java
NotificationImportExportListener.java
导入到内置存储是正常的,导入到外置SD卡失败,所以这里保存的路径很重要,沿着这个思路,分析文件跳转流程,即可以找到路径的获取与流转再到最后的使用
setShowingStep
ContactImportExportActivity: onclick->onNextAction()->doImportExport()->handleImportExportAction()
联系人数据都在这个文件中获取,并使用LoaderCallbacks进行加载,这里要了解LoaderCallbacks的用法
ContactListMultiChoiceActivity:onOptionAction
->MultiDuplicationPickerFragment: onOptionAction->doExportVCardToSDCard()
->ExportVCardActivity: onServiceConnected
->VCardService:handleRequestAvailableExportDestination->handleExportRequest
->NotificationImportExportListener:onExportProcessed
ExportProcessor: run->runInternal()
最终这里报了错outputStream = mResolver.openOutputStream(uri);
08-16 15:00:56.925 1085 3930 W ContactsApp/ExportProcessor: FileNotFoundException thrown
08-16 15:00:56.925 1085 3930 W ContactsApp/ExportProcessor: java.io.FileNotFoundException: open failed: EACCES (Permission denied)
AndroidP对系统应用读取SD卡有限制,该问题在另一篇文章中分析
写得有点乱,暂时先这样,后续等我学了画流程图的工具再优化