Получить контакт с React Native

#javascript #reactjs #react-native #contacts #native-module

Вопрос:

Я хочу создать страницу экрана, по которой можно перемещаться в списке контактов на моем телефоне. поэтому я создал собственный модуль для get contact, он работал, но для Android 10 и ниже. Для Android 11 он не может работать. Созданная мной функция не может получить контактные данные.Я убедился, что все разрешения есть. Ниже приведен код, который я сделал

 const getChooseContact = () => {
    const { ContactsWrapper } = NativeModules;

    ContactsWrapper.getContact()
      .then((contact) => {
        setPhoneNumber(contact.phoneNumber);
      })
      .catch((error) => {
        console.log(error);
      });
  };

const requestMediaPermission = async () => {
    try {
      const granted = await PermissionsAndroid.request(
        PermissionsAndroid.PERMISSIONS.READ_CONTACTS,
      );

      if (granted === PermissionsAndroid.RESULTS.GRANTED) {
        getChooseContact();
      } else {
        setErrorMessage('Access media permission denied');
      }
    } catch (err) {
      console.log(err);
    }
  };
 

Комментарии:

1. Не могли бы вы, пожалуйста, добавить, что происходит? Вы видите ошибку?

2. никаких ошибок, функция ContactsWrapper.GetContact() не работает в Android 11 @p-syche

Ответ №1:

В основном это связано с тем, что в API 30 и выше мы больше не можем взаимодействовать с внешними модулями без специального разрешения на взаимодействие. Это может произойти двумя способами, одним из которых является использование <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" /> внутренней androidmanifest.xml хотя это не рекомендуется, так как это может привести к отклонению вашего приложения, Прочтите это любезно https://support.google.com/googleplay/android-developer/answer/10158779#zippy=,permitted-uses-of-the-query-all-packages-permission

чтобы устранить вашу проблему

  1. внутри build.gradle в разделе пути к классам обновления Android : путь к классам ‘com.android.tools.build:gradle:3.5.4’ это позволяет распознать следующий шаг во время упаковки, в противном случае вы получите сообщение об ошибке
  2. внутри androidmanifest.xml перед тегом приложения добавьте это
  <queries>
        <!-- Browser -->
        
        <intent android:label="View Contact">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="vnd.android.cursor.item/person" android:host="contacts" />
         
        </intent>


    </queries>