对于某些 Android 设备,添加联系人不会 return 数据 onactivityresult 方法

Add Contact does not return data onactivityresult method for some Android devices

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

上运行良好

我在 Sony 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 设备上,当我的应用程序调用 addContactUsingIntent 时,设备的默认联系人应用程序将打开。一旦用户保存联系人,我就会在 onActivityResult 中得到 data。在 Sony Xperia 设备上,添加联系人的默认联系人屏幕也会打开,但在用户保存后,它会显示新添加的联系人,然后用户必须手动按返回 return 到我的应用程序。这样做,当onActivityResult" is called, it comes back with data as null andresultCodeas-1`时,显然不是这样。

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

任何让它发挥作用的建议都将不胜感激。

谢谢

P.S。我还在 Oppo F3 Plus (Android 6.0.1) 上测试了这段代码,它运行得非常好。

问题出在您的 Intent 索尼 XPERIA 设备上即将出现的应用程序中。他们显然没有很好地测试 ACTION_INSERT(虽然你的 INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED 不是 Android SDK 的一部分,很可能会被忽略)。

但是,您对此无能为力,除非您是 Sony 员工并且可以以某种方式修复其联系人应用程序中的错误。