• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    해결됨

연락처 접근하기에서

20.10.21 14:14 작성 조회수 387

0

윈도우 os 환경에서 작업하고 있습니다.

안드로이드에서 연락처를 못 불러 오는것 같습니다.

제 소스는

  async requestContactPermission(){
    if(Platform.OS === 'ios') {
      console.warn('ios')
      return true
    } else {
      console.warn('Android')
      
      const granted = await PermissionsAndroid.requestMultiple([
        PermissionsAndroid.PERMISSIONS.WRITE_CONTACTS,
        PermissionsAndroid.PERMISSIONS.READ_CONTACTS
      ]);
      

      if(
        granted['android.permission.READ_CONTACTS'=== PermissionsAndroid.RESULTS.GRANTED &&
        granted['android.permission.WRITE_CONTACTS'=== PermissionsAndroid.RESULTS.GRANTED
      ) {
        return true        
      } else {
        return false
      }
    }
  }

  getContacts = () => {
    this.requestContactPermission()
    .then((didGetPermission)=>{
      if(didGetPermission){
        Contacts.getAll((errcontacts) => {
          if(err){
            throw err;
          }
          console.warn(contacts)
        })
      } else {
        alert('no permission')
      }
    })
 }

그리고 에러는

WARN  Possible Unhandled Promise Rejection (id: 0):

Error: Exception in HostFunction: Malformed calls from JS: field sizes are different.

[[31,34],[4,0],[[10,2000,1603256350959,false]],67]

[native code]

enqueueNativeCall@http://10.0.2.2:8081/index.bundle?platform=android&dev=true&minify=false:2589:43

fn@http://10.0.2.2:8081/index.bundle?platform=android&dev=true&minify=false:2161:42

createTimer@http://10.0.2.2:8081/index.bundle?platform=android&dev=true&minify=false:30885:38

setTimeout@http://10.0.2.2:8081/index.bundle?platform=android&dev=true&minify=false:30693:18

_87@http://10.0.2.2:8081/index.bundle?platform=android&dev=true&minify=false:27319:30

reject@http://10.0.2.2:8081/index.bundle?platform=android&dev=true&minify=false:27196:18

doResolve@http://10.0.2.2:8081/index.bundle?platform=android&dev=true&minify=false:27237:13

Promise@http://10.0.2.2:8081/index.bundle?platform=android&dev=true&minify=false:27084:14

fn@http://10.0.2.2:8081/index.bundle?platform=android&dev=true&minify=false:2134:27

http://10.0.2.2:8081/index.bundle?platform=android&dev=true&minify=false:96716:48

tryCallOne@http://10.0.2.2:8081/index.bundle?platform=android&dev=true&minify=false:27052:16

http://10.0.2.2:8081/index.bundle?platform=android&dev=true&minify=false:27153:27

_callTimer@http://10.0.2.2:8081/index.bundle?platform=android&dev=true&minify=false:30607:17

_callImmediatesPass@http://10.0.2.2:8081/index.bundle?platform=android&dev=true&minify=false:30643:19

callImmediates@http://10.0.2.2:8081/index.bundle?platform=android&dev=true&minify=false:30862:33

callImmediates@[native code]

__callImmediates@http://10.0.2.2:8081/index.bundle?platform=android&dev=true&minify=false:2647:35

http://10.0.2.2:8081/index.bundle?platform=android&dev=true&minify=false:2424:34

__guard@http://10.0.2.2:8081/index.bundle?platform=android&dev=true&minify=false:2630:15

flushedQueue@http://10.0.2.2:8081/index.bundle?platform=android&dev=true&minify=false:2423:21

flushedQueue@[native code]

invokeCallbackAndReturnFlushedQueue@[native code]

이렇게 뜨는데요. 

뭐가 문제인지 답변 부탁드립니다.

"react""16.9.0",
"react-native""0.61.5",
"react-native-contacts""^6.0.2",

답변 2

·

답변을 작성해보세요.

3

hwd3527님의 프로필

hwd3527

질문자

2020.10.23

react-native-contacts 버전 5.X 대로 낮춰서 하니까 됩니다.~~

0

박치성님의 프로필

박치성

2021.03.17

저도 같은 에러가 발생하였는데요. 6.X 버전 사용중일 때

if(didGetPermission) {
            Contacts.getAll().then((contacts=> {
                console.log(contacts);
            })
            .catch((e=> {}  )
        }else {
            alert('no permission');
       }

이렇게 .then 으로 받으면 정상동작 합니다.