nativescript-phone предотвращает возврат контактов Nativescript

У меня есть приложение, в котором я хочу выбрать человека из контактов, а затем отправить ему текст. Это работает, как и ожидалось, для первого пользователя, но после этого приложение никогда не получает управление после выбора контакта. Я изолировал проблему с плагином Nativescript-phone. Если вы просто вызываете phone.sms() для отправки текста, а затем вызываете contact.getContact(), возникает проблема. Я вижу это и на Android, и на iOS.

Я создал пример приложения, демонстрирующего проблему, на странице https://github.com/dlcole/contactTester. Пример приложения только для Android. Я потратил пару дней на это и приветствую любые идеи.

Редактировать 21.04.2020:

Я потратил больше времени на это и вижу, что происходит. Оба плагина имеют одинаковый обработчик событий и одинаковые коды запросов:

родной скрипт-телефон:

var SEND_SMS = 1001;
activity.onActivityResult = function(requestCode, resultCode, data) {

nativescript-контакты:

var PICK_CONTACT = 1001;
appModule.android.on("activityResult", function(eventData) {

Что происходит, так это то, что после вызова phone.sms вызов contact.getContact заставляет управление вернуться к плагину телефона, а НЕ к плагину контактов. Я попытался изменить код запроса телефона на 1002, но получил те же результаты.

Итак, следующий шаг — определить, как избежать коллизии обработчиков событий.


person David    schedule 19.04.2020    source источник
comment
Извините, я не могу воспроизвести проблему. Каждый раз, когда я нажимаю на получение контакта, я вижу журналы выбранных контактов.   -  person Manoj    schedule 20.04.2020
comment
@manoj Даже после нажатия «Отправить текст»? Я вижу проблему на всех устройствах и эмуляторах, iOS и Android.   -  person David    schedule 21.04.2020
comment
@manoj Итак, если это работает для вас, но не для меня, значит, это может быть моя сборка, да? Я удалил платформы, переместил node_modules и удалил/повторно добавил интерфейс командной строки {N}, но безуспешно. Что-нибудь еще вы можете предложить?   -  person David    schedule 21.04.2020
comment
С какой версией ОС вы его тестируете? Вы пытались разместить отладчик или операторы журнала внутри метода getContact плагина, чтобы точно увидеть, где он останавливается.   -  person Manoj    schedule 21.04.2020
comment
@Manoj - я обновил проблему, включив в нее детали, которые обнаружил при отладке обоих плагинов.   -  person David    schedule 21.04.2020
comment
@Manoj спасибо за ответ - я поэкспериментирую с этим и, возможно, сделаю запрос на включение плагина. Сторона iOS, похоже, представляет собой совершенно другую проблему, но с аналогичными симптомами. Я опубликую больше после того, как проведу дополнительное расследование.   -  person David    schedule 22.04.2020


Ответы (1)


Вместо использования события activityResult плагин nativescript-phone перезаписывает обратный вызов результата действия по умолчанию.

Обходной путь — установить исходное значение обратного вызова после того, как вы закончите работу с nativescript-phone.

exports.sendText = function (args) {
  console.log("entering sendText");

  const activity = appModule.android.foregroundActivity || appModule.android.startActivity;
  const onActivityResult = activity.onActivityResult;

  permissions.requestPermissions([android.Manifest.permission.CALL_PHONE],
    "Permission needed to send text")
    .then(() => {
      console.log("permission granted");
      phone.sms()
        .then((result) => {
          console.log(JSON.stringify(result, null, 4));
          activity.onActivityResult = onActivityResult;
        })
    })
}
person Manoj    schedule 21.04.2020
comment
Я отправил запрос на вытягивание на nativescript-phone, который включает это исправление. Он будет включен в грядущее обновление v2.0. Это только для Android. У iOS есть отдельная проблема с похожими симптомами, и я создам для нее новый пост по мере дальнейшего изучения. - person David; 23.04.2020