微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android上的后退按钮可以保存联系人,而不是返回应用

我已经设置了一个使用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,该任务完全独立于启动它的应用程序(因此,当按下后退时它不会返回它).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐