Функция «Добавить контакт» не возвращает метод данных об активности для некоторых устройств Android. - PullRequest
0 голосов
/ 31 мая 2018

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

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

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

Спасибо

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

1 Ответ

0 голосов
/ 31 мая 2018

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

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

...