#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
чтобы устранить вашу проблему
- внутри build.gradle в разделе пути к классам обновления Android : путь к классам ‘com.android.tools.build:gradle:3.5.4’ это позволяет распознать следующий шаг во время упаковки, в противном случае вы получите сообщение об ошибке
- внутри 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>