Android/에러

[Android] Unable to start activity ComponenInfo : Permission Denial 에러

Meezzi 2022. 11. 5. 17:18
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