联系人导入\导出到SIM卡分析

联系人导入\导出分析:
在ImportExportDialogFragment.java类中:
在clickListener中对导入/导出到不同地方进行处理:
import_from_sim(从SIM卡导入):执行: handleImportFromSimRequest(resId);
handleImportFromSimRequest()判断单双卡,单卡直接执行:
handleImportRequest()方法:
执行
SelectAccountDialogFragment.show(
                        mactiv.getFragmentManager(), this,
                        R.string.dialog_new_contact_account,
                        AccountListFilter.ACCOUNTS_CONTACT_WRITABLE_WITHOUT_SIM, args);//这里弹出一个选择账户的dialog
show()方法:
显示出需要导入到哪个账户的dialog后,但点击选择账户时执行:
target.onAccountChosen(account, getArguments().getBundle(KEY_EXTRA_ARGS));
SelectAccountDialogFragment.java中有个Listener接口:
 public interface Listener {
        void onAccountChosen(AccountWithDataSet account, Bundle extraArgs);
        void onAccountSelectorCancelled();
    }
在ImportExportDialogFragment.java中实现上面的Listener接口:
public class ImportExportDialogFragment extends DialogFragment
        implements SelectAccountDialogFragment.Listener {
实现接口中的onAccountChosen()方法:
 @Override
    public void onAccountChosen(AccountWithDataSet account, Bundle extraArgs) {
        AccountSelectionUtil.doImport(mactiv, extraArgs.getInt(KEY_RES_ID), account);//调用这个方法实现导入

        // At this point the dialog is still showing (which is why we can use getActivity() above)
        // So close it.
        dismiss();
    }

public static void doImport(Context context, int resId, AccountWithDataSet account) {
        switch (resId) {
            case R.string.import_from_sim: {
                    doImportFromSim(context, account);//导入到SIM卡
                break;
            }
            case R.string.import_from_sdcard: {
                doImportFromSdCard(context, account);//导入到SD卡
                break;
            }
        }
    }

public static void doImportFromSim(Context context, AccountWithDataSet account) {
     public static final String ACTION_MULTI_PICK_SIM = "com.android.contacts.action.MULTI_PICK_SIM";
        Intent importIntent = new Intent(ACTION_MULTI_PICK_SIM);//跳转到选择导入哪些联系人的Activity中也就是MultiPickContactActivity.java。
        if (account != null) {
            importIntent.putExtra("account_name", account.name);
            importIntent.putExtra("account_type", account.type);
            importIntent.putExtra("data_set", account.dataSet);
        }
        if (MSimTelephonyManager.getDefault().isMultiSimEnabled()) {
            importIntent.putExtra(SUBSCRIPTION_KEY,mImportSub);
        } else {
            importIntent.putExtra(SUBSCRIPTION_KEY,0);
        }
        context.startActivity(importIntent);
    }
选择导入哪些联系人Activity类:MultiPickContactActivity.java
这个类中的onClick方法:
case R.id.btn_ok:
这个选中后点击确认导入:
主要执行:
    Intent intent = new Intent();
    Bundle bundle = new Bundle();
    bundle.putBundle(RESULT_KEY, mChoiceSet);
    intent.putExtras(bundle);
    this.setResult(RESULT_OK, intent);//这个方法把结果和意图(intent)传递到原来的Activity,在原来的ActivityResult方法中接收。这里主要传到PeopleActivity.java中.
    finish();
在PeopleActivity.java中:
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       case ImportExportDialogFragment.SUBACTIVITY_MULTI_PICK_CONTACT://这个就是接收到上面传下来的。
             mExportThread =
                                new ImportExportDialogFragment().createExportToSimThread(
                                ImportExportDialogFragment.ExportToSimThread.TYPE_SELECT,ImportExportDialogFragment.mExportSub,mContactList,PeopleActivity.this);
                           mExportThread.start();//用这个线程来开始到出。

在ExportToSimThread线程中把联系人信息插入到数据库。
基本导入过程就这样了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值