0

我想制作一个可以在手机联系人列表中导航的屏幕页面。所以我制作了一个本机模块来获取联系,它可以工作,但适用于 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);
    }
  };
4

1 回答 1

0

这主要是因为在 API 30 及更高版本中,我们不能再与外部模块进行交互,而无需特别允许交互。这可以通过两种方式发生,一种是使用<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />androidmanifest.xml 内部,尽管不鼓励这样做,因为它可能会拒绝您的应用程序请阅读此https://support.google.com/googleplay/android-developer/answer/10158779#zippy= %2Cpermitted-uses-of-the-query-all-packages-permission

解决您的问题

  1. 在 android 下的 build.gradle 中更新类路径到这个:classpath '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>
于 2021-11-30T13:50:41.803 回答