添加联系人不会为某些Android设备返回数据onactivityresult方法

时间:2018-05-31 11:36:51

标签: android android-intent contact onactivityresult

我正在弄乱以下代码,使其在所有设备上运行。 幸运的是,它在LG Nexus 5(Android 6.0.1)

上运行得非常好

我正在尝试索尼Xperia D6503(Android 6.0.1)的相同代码。 但它不起作用。

private void addContactUsingIntent() {
        Intent intent = new Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI);
        intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
        intent.putExtra(INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED, true);
        //ContactsListActivity.this.startActivityForResult(intent, INSERT_CONTACT_REQUEST);
        startActivityForResult(intent, INSERT_CONTACT_REQUEST);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == INSERT_CONTACT_REQUEST) {
            if (resultCode == RESULT_OK) {
                Uri contactData = data.getData();

                Cursor cursor = getContentResolver().query(contactData, null, null, null, null);
                if (cursor.moveToFirst()) {
                    long newId = cursor.getLong(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));

                    String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));

                    String email = getEmail(String.valueOf(newId));

                    ArrayList<String> phones = new ArrayList<>();

                    Cursor cPhones = getContentResolver().query(
                            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null,
                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
                            new String[]{String.valueOf(newId)}, null);

                    while (cPhones.moveToNext()) {
                        phones.add(cPhones.getString(cPhones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
                    }

                    cursor.close();
                    cPhones.close();

                    Uri photoUri = getPhotoUri(newId);
                    Log.i("Photo URI", photoUri.toString());

                    updateViews(newId, name, phones, email, photoUri);
                }
            }
        }
    }

请查看上面的代码,如果我做错了,请告诉我。

在LG Nexus 5设备上,当我的应用程序调用{​​{1}}时,设备的默认联系人应用程序将打开。用户保存联系后,我addContactUsingIntent会收到data。在Sony Xperia设备上,还会打开用于添加联系人的默认联系人屏幕,但在用户保存后,它会显示新添加的联系人,然后用户必须手动按回以返回到我的应用程序。这样做,当onActivityResult resultCode onActivityResult" is called, it comes back with data as null and - 1`时,显然不是这种情况。

我也尝试过以下解决方案,但它不适用于此设备。 Add contact intent doesn't return data onActivityResult under ICS

非常感谢任何使其成功的建议。

由于

P.S 即可。我也在Oppo F3 Plus(Android 6.0.1)上测试了这个代码,它的工作非常好。

1 个答案:

答案 0 :(得分:0)

问题在于您的Sony XPERIA设备上的Intent即将推出的应用。他们显然没有很好地测试ACTION_INSERT(尽管您的INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED不是Android SDK的一部分,很可能会被忽略)。

但是,除非您是索尼员工并且可以以某种方式修复其联系人应用中的错误,否则您无法做到这一点。