联系人导入导出分析

4,导入导出

单卡的导入导出界面如下,


导出到SIM卡的过程界面如下,


在联系人主界面(PeopleActivity)点击右上角的导入导出菜单, 就会出现界面1, PeopleActivity 的onOptionsItemSelected方法对导入导出菜单的点击事件处理如下,

case R.id.menu_import_export: {
    ImportExportDialogFragment.show(getFragmentManager(), areContactsAvailable(),
            PeopleActivity.class);
    return true;

ImportExportDialogFragment继承自AnalyticsDialogFragment,继承自DialogFragment,其static的show方法逻辑如下,

1,构造ImportExportDialogFragment对象,

final ImportExportDialogFragment fragment = new ImportExportDialogFragment();

2,显示DialogFragment,就是界面2,

fragment.show(fragmentManager, ImportExportDialogFragment.TAG);

在ImportExportDialogFragment的onCreateDialog方法中,会控制显示内容,对内容的点击监听事件分别处理如下,

1,从SIM卡中导入,

case R.string.import_from_sim: {
    handleImportFromSimRequest(resId);
    break;
}

2,从存储设备导入,

case R.string.import_from_vcf_file: {
    handleImportRequest(resId);
    break;
}

3,导出到SIM卡,

case R.string.export_to_sim: {
    handleExportToSimRequest(resId);
    break;
}

4,导出到存储设备

case R.string.export_to_vcf_file: {
    Intent exportIntent = new Intent(SimContactsConstants.ACTION_MULTI_PICK,
                                Contacts.CONTENT_URI);
    exportIntent.putExtra(SimContactsConstants.IS_CONTACT, true);
    ContactListFilter filter = ContactListFilter.restoreDefaultPreferences(
    •••

5,分享联系人

case R.string.share_visible_contacts: {
    doShareVisibleContacts();
    break;
}

这几个导入导出的过程几乎完全相同,就论述SIM卡导入导出过程。

4.1从SIM卡导入

从SIM卡导入联系人到本地是调用handleImportFromSimRequest方法,该方法调用流程图如下,


handleImportFromSimRequest方法逻辑如下,

1,手机上面有2张SIM卡,

if (MoreContactUtils.getEnabledSimCount() > 1) {
    displayImportExportDialog(R.string.import_from_sim_select,null);
} else {
   AccountSelectionUtil.setImportSubscription(getEnabledIccCard());
    handleImportRequest(Id);
}

2,手机上面只有一张SIM卡,

handleImportRequest(Id);

其实,双卡和单卡的导入流程完全相同,只是双卡多了一些选择的过程,实质是完全相同的。

handleImportRequest方法如下,

AccountSelectionUtil.doImport(mActivity, resId, (size == 1 ? accountList.get(0) : null));

AccountSelectionUtil的doImport方法如下,

switch (resId) {
   case R.string.import_from_sim: {  //从SIM卡导入
       doImportFromSim(context, account);
       break;
   }
   case R.string.import_from_vcf_file: { // 从存储设备导入
       doImportFromVcfFile(context, account);
       break;
   }
}

根据id分别进行处理, doImportFromSim方法如下,

Intent importIntent = new Intent(SimContactsConstants.ACTION_MULTI_PICK_SIM);
•••
context.startActivity(importIntent);

启动联系人界面(MultiPickContactActivity),加载SIM卡上面的所有联系人,然后选择导入的SIM卡联系人导入到本地。

4.2导出到SIM卡

将本地联系人可以通过调用handleExportToSimRequest方法导入到SIM卡,该方法如下,

1,如果是双卡,弹出界面进行选择,

displayImportExportDialog(Id, null).show();

2,如果是单卡,跳到联系人选择界面选择需要导出的联系人,

mExportSub = getEnabledIccCard();
Intent pickPhoneIntent = new Intent(SimContactsConstants.ACTION_MULTI_PICK,
 Contacts.CONTENT_URI);
// do not show the contacts in SIM card
pickPhoneIntent.putExtra(AccountFilterActivity.KEY_EXTRA_CONTACT_LIST_FILTER,
ContactListFilter.createFilterWithType(ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS));
•••
mActivity.startActivityForResult(pickPhoneIntent, SUBACTIVITY_MULTI_PICK_CONTACT);

启动联系人界面(MultiPickContactActivity),加载本地的所有联系人,然后选择联系人,导出到SIM卡。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值