Функция "Добавить контакт" не возвращает метод данных об активности для некоторых устройств Android.

Я возиться со следующим кодом, чтобы он работал на всех устройствах. К счастью, он отлично работает на 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 откроется приложение для контактов по умолчанию на устройстве. Как только пользователи сохраняют контакт, я получаю data в onActivityResult, На устройстве Sony Xperia также открывается экран контактов по умолчанию для добавления контакта, но после того, как пользователи сохранят его, он отображает только что добавленный контакт, а затем пользователь должен вручную нажать обратно, чтобы вернуться в мое приложение. Делая так, когда onActivityResult" is called, it comes back with data as null andResultCodeas-1`, что явно не так.

Я также попробовал следующее решение, но оно не работает на этом устройстве. Намерение добавления контакта не возвращает данные об ActivityResult под ICS

Будем весьма благодарны за любые предложения, чтобы заставить его работать.

Спасибо

PS Я также протестировал этот код на Oppo F3 Plus (Android 6.0.1), и он работает отлично.

1 ответ

Решение

Проблема заключается в приложении, которое подходит для вашего Intent на вашем устройстве Sony XPERIA. Они явно не тестировали ACTION_INSERT очень хорошо (хотя ваш INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED не является частью Android SDK и, вероятно, будет проигнорировано).

Однако с этим ничего нельзя поделать, если только вы не являетесь сотрудником Sony и не можете как-то исправить ошибку в приложении контактов.

Другие вопросы по тегам