我已经设置了一个使用cordova创建新联系人的应用程序。我为此创建了一个自定义Cordova插件,它通过启动Intent来打开Contact创建屏幕并填充其上的一些字段来完成。但是,当在此屏幕上按下后退按钮时,不会返回应用程序,而是保存联系人。这种预期的行为是否有某种方式,有没有办法阻止它?
启动联系人创建屏幕的代码如下所示:
private void createContact(String fullname, String phone, String company) {
Context context=this.cordova.getActivity().getApplicationContext();
Intent i = new Intent(Intent.ACTION_INSERT);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
i.setType(ContactsContract.Contacts.CONTENT_TYPE);
i.putExtra(ContactsContract.Intents.Insert.NAME, fullname);
i.putExtra(ContactsContract.Intents.Insert.PHONE, phone);
i.putExtra(ContactsContract.Intents.Insert.COMPANY, company);
context.startActivity(i);
}
答案 0 :(得分:1)
这是预期的行为。您可以签入“联系人”应用程序的源代码。
从manifest我们可以确定处理此意图的活动是ContactEditorActivity
。在内部,它使用ContactEditorFragment
,几乎可以处理所有事情。
按下保存按钮时,执行的代码为
View saveMenuItem = customActionBarView.findViewById(R.id.save_menu_item);
saveMenuItem.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mFragment.doSaveAction();
}
});
Fragment类中doSaveAction()
的实现是:
public void doSaveAction() {
save(SaveMode.CLOSE);
}
您可能感兴趣的一点是,活动的onBackPressed()
也会保存。
@Override
public void onBackPressed() {
mFragment.save(SaveMode.CLOSE);
}
因此,基本上,保存和退出执行完全相同的代码。
注意:我认为问题(从您的角度来看)是联系人已保存。关于“不返回应用”部分,答案更简单:只需删除FLAG_ACTIVITY_NEW_TASK
和FLAG_ACTIVITY_MULTIPLE_TASK
标记。
FLAG_ACTIVITY_NEW_TASK
指示Android在新任务中启动Activity,该任务完全独立于启动它的应用程序(因此,当按下后退时它不会返回到它)。