Функция "Добавить контакт" не возвращает метод данных об активности для некоторых устройств 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 and
ResultCodeas
-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 и не можете как-то исправить ошибку в приложении контактов.