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

时间:2014-05-30 08:15:35

标签: android cordova android-intent

我已经设置了一个使用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);
}

1 个答案:

答案 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_TASKFLAG_ACTIVITY_MULTIPLE_TASK标记。

FLAG_ACTIVITY_NEW_TASK指示Android在新任务中启动Activity,该任务完全独立于启动它的应用程序(因此,当按下后退时它不会返回到它)。