【问题标题】:React Native Contact Permission always return deniedReact Native 联系权限总是返回被拒绝
【发布时间】:2021-09-06 04:26:51
【问题描述】:

首先,我安装了

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

【问题讨论】:

    标签: android react-native


    【解决方案1】:
    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);
            
            }
          };
    

    【讨论】:

    • 你能帮我找出我的代码的问题吗??
    • 我从设置中授予了联系权限,但如果我试图控制 res 则返回被拒绝。
    • 你是在安卓还是ios上测试
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多