我已经设置了一个使用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);
}
解决方法:
这是预期的行为.您可以签入Contacts应用程序的源代码.
从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);
}
您可能感兴趣的一点是Activity的onBackPressed()也会保存.
@Override
public void onBackPressed() {
mFragment.save(SaveMode.CLOSE);
}
因此,基本上,保存和退出执行完全相同的代码.
注意:我认为问题(从您的角度来看)是联系人已保存.关于“不返回应用程序”部分,答案要简单得多:只需删除FLAG_ACTIVITY_NEW_TASK和FLAG_ACTIVITY_MULTIPLE_TASK标志即可.
FLAG_ACTIVITY_NEW_TASK
指示Android在新任务中启动Activity,该任务完全独立于启动它的应用程序(因此,当按下后退时它不会返回它).
原文地址:https://codeday.me/bug/20190708/1404804.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。