nativescript-phone предотвращает возврат Nativescript-контактов - PullRequest
0 голосов
/ 19 апреля 2020

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

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

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

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

nativescript-phone:

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

nativescript-contacts:

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

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

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

1 Ответ

1 голос
/ 22 апреля 2020

Вместо использования события 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;
        })
    })
}
...