728x90
안드로이드 주소록 가져오기 프로젝트를 진행하다가 이런 에러가 떴습니다.
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.YourVoice/com.example.YourVoice.MainActivity}: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.contacts.ContactsProvider2 from ProcessRecord{b04300a 26527:com.example.YourVoice/u0a706} (pid=26527, uid=10706) requires android.permission.READ_CONTACTS or android.permission.WRITE_CONTACTS
대략 허가가 필요하다고 한 것 같습니다.
requires android.permission.READ_CONTACTS or android.permission.WRITE_CONTACTS
메니페스트 파일에서 READ_CONTACTS권한과 WRITE_CONTACTS권한을 설정하라는 뜻입니다. 다만 저는 메니페스트 파일에 이미 설정을 한 상태였습니다.
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
이미 설정을 한 상태인데 자꾸 권한을 설정하라니..
계속해서 구글링을 하다가 사용자가 직접 허락할 수 있도록 퍼미션을 체크하라는 글이 있더라구요.
public void PermissionCheck(){
if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_DENIED||
ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_CALL_LOG) == PackageManager.PERMISSION_DENIED||
ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_DENIED||
ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_DENIED||
ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_DENIED||
ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.INTERNET)==PackageManager.PERMISSION_DENIED
)
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.CALL_PHONE,
Manifest.permission.READ_CALL_LOG,
Manifest.permission.RECORD_AUDIO,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.READ_CONTACTS,
Manifest.permission.INTERNET
},0);
}
메인 액티비티에서 퍼미션을 허용하도록 한 후, 다음 코드를 추가합니다.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//퍼미션 허용
PermissionCheck();
}
다시 안드로이드 폰에 재설치 한 후, 권한을 허용하면 해결됩니다.
728x90