1

首先,我安装了

npm install react-native-contacts --save

从 npm 并根据 npm 文档设置对我的项目的所有依赖项。但是,我仍然被拒绝,

1.在android/settings.gradle

include ':react-native-contacts' project(':react-native-contacts').projectDir = new
File(rootProject.projectDir,
'../node_modules/react-native-contacts/android')

2.在android/app/build.gradle

dependencies {
 ...
 implementation project(':react-native-contacts') 

}

注册模块

    //  MainApplication.java
   import com.rt2zz.reactnativecontacts.ReactNativeContacts; // <--- import
    
    public class MainApplication extends Application implements ReactApplication {   ......   @Override   protected List<ReactPackage>
    getPackages() {
        return Arrays.<ReactPackage>asList(
                new MainReactPackage(),
                new ReactNativeContacts()); // <------ add this   }   ...... }

允许:

<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />

我在 Mycontact.js 中的代码:

import React, {useState,useEffect} from 'react';
import { 
    View,
    Text, 
    Button,
    FlatList,
    StyleSheet,
    TouchableOpacity,
    PermissionsAndroid 
  } from 'react-native';
import Ionicons from 'react-native-vector-icons/Ionicons';
import Contacts from 'react-native-contacts';
import { useIsFocused } from '@react-navigation/native';
import FontAwesome5 from 'react-native-vector-icons/FontAwesome5';
import ContactCard from './ContactCard';

const Mycontact = ({navigation}) => {
    const [myContacts, setMycontacts] = useState([]);
    const isFocus = useIsFocused();
    useEffect(() => {
       getAllContact();
    }, [isFocus]);

    async function getAllContact(){
      try{
        
        const permission = await PermissionsAndroid.request(
          PermissionsAndroid.PERMISSIONS.READ_CONTACTS,
          {
            'title': 'Contacts',
            'message': 'This app would like to view your contacts.',
            'buttonPositive': 'Please accept bare mortal'
          }
          
        );
        if(permission === PermissionsAndroid.RESULTS.GRANTED){
          const contactis = await Contacts.getAll();
          console.log('contactis');
          setMycontacts(contactis);
        }else{
          console.log("Permission Denied");
          
        }
      }catch(error){
        console.log(error);
      }
    }
    return (
        <View>
            <Ionicons
                name='add-circle'
                size={62}
                color='green'
                style={styles.addIcon}
                onPress={()=>navigation.navigate('Createcontact') }
            />
            <FlatList
            data={myContacts}
            keyExtractor={(item)=> item.recordId}
            renderItem={({item})=>{
              <TouchableOpacity onPress={()=>navigation.navigate('Profile',{
                contactinfo:{id:item.recordId}
              })}>
                <ContactCard contactinfo={item}/>
              </TouchableOpacity>
            }}
            />
        </View>
    );
}

const styles= StyleSheet.create({

})

export default Mycontact;

仍然,我得到许可被拒绝;在运行代码期间没有出现模态或弹出窗口。为什么???

导致控制台

Permission denied
4

1 回答 1

0
import {Linking,Alert} from 'react-native'
import Contacts from 'react-native-contacts';

   Contacts.checkPermission().then(res => {
      
            if (res === 'authorized') {
              getContacts();
            } else if (res === 'denied') {
              
              Alert.alert(
                'AppName',
                'You have to give permission to get contacts ',
                [
                  {
                    text: 'Cancel',
                    onPress: () => console.log('Cancel Pressed'),
                    style: 'cancel',
                  },
                  {text: 'Allow', onPress: () => Linking.openSettings()},
                ],
              );
            }
          });

这是getContacts的功能

    const getContacts = async () => {
        try {
          Contacts.getAll().then(res => {
            let arr = res.map(item => {
             return item
              }
            });
    console.log('AllContacts',arr)    
     
          });
        } catch (err) {
          console.log(err);
        
        }
      };
于 2021-09-06T04:35:18.510 回答