Почему плагин ionic-native / contacts вызывает сбой приложения при попытке сохранить контакт на Android 8?

Пытаюсь сохранить контакт с помощью ionic-native/contacts plugin, работает на всех версиях android кроме android 8, приложение останавливается и закрывается. Это мой код, который аналогичен примеру ionic framework:

SaveToContact(phone, name) {
try {
  
  let contact: Contact = this.contacts.create();
  contact.name = new ContactName(null, name, '');
  contact.phoneNumbers = [new ContactField('mobile', phone)];
  this.global.presentToast('Will Save!'),
    contact.save().then(
      () => this.global.presentToast('Contact saved!'),
      (error: any) => this.global.presentToast('Error saving contact: No Permission')
    );
} catch (e) {
  this.global.presentToast(e);
}

Я использовал android-26 для сборки apk, а это версии для ionic-native/contacts plugin

@ угловой / ядро: 5.0.3

ионно-угловой: 3.9.2

Кордова-плагин-контакты: ^ 3.0.1

@ ionic-native / контакты: ^ 4.7.0

Я также помещаю объект плагина в массив поставщика в модуле приложения, но все равно приложение вылетает.


person Sawan    schedule 20.07.2018    source источник
comment
Вы отлаживали remote devices в браузере?   -  person omurbek    schedule 20.07.2018


Ответы (3)


Этот плагин не работает из-за изменения способа обработки разрешений Android в версии 8.0 (https://developer.android.com/about/versions/oreo/android-8.0-changes#o-pri).

В основном: в прошлом запрос разрешения на запись контакта также давал вам разрешение на чтение контакта, но теперь вы должны запросить оба, если вы хотите сделать и то, и другое (но он будет запрашивать пользователя только один раз). Причина, по которой функция сохранения приводила к сбою приложения, заключалась в том, что оно записывало контакт, а затем пыталось его прочитать, когда у него было только разрешение на запись.

Я раздвоил репозиторий и обновил файл ContactManager.java для работы с Android 8.0: https://github.com/duncan-c/cordova-plugin-contacts/blob/master/src/android/ContactManager.java

Вы можете просто перезаписать файл ContactManager.java в каталоге plugins / cordova-plugin-contacts / src / android, а затем заставить ionic перекомпилировать плагин, удалив, а затем повторно добавив платформу Android:

>ionic platform rm android

>ionic platform add android
person Duncan Cowan    schedule 09.10.2018

Взгляните на примечания к выпуску на официальном github плагина cordova. Справочная информация

В нем говорится, что они официально не рекомендуют плагин с 15 декабря 2017 года, и они не объявили, что сделали плагин совместимым с Android 8.0 до этого, поэтому мы можем с уверенностью предположить, что они прекратили работу над плагином, прежде чем сделать его совместимым с Android 8.0.

person jeff chef    schedule 20.07.2018

введите здесь описание изображения

измените targetSdkVersion на 23

person lilong    schedule 31.07.2018
comment
Пожалуйста, не размещайте изображения кода - вместо этого разместите фактический код. - person CertainPerformance; 31.07.2018
comment
почему, это очень легко понять. - person lilong; 31.07.2018
comment
enter image description here Нет: idownvotedbecau.se/imageofcode Изображение вашего кода бесполезно - person CertainPerformance; 31.07.2018
comment
ок, вот так у меня получилось, на картинке легче видно где файл видоизменен. - person lilong; 31.07.2018