联系人导入\导出分析:
在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线程中把联系人信息插入到数据库。
基本导入过程就这样了。
在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线程中把联系人信息插入到数据库。
基本导入过程就这样了。