AOS

권한처리

asu2880 2021. 6. 1. 18:50

권한처리

 

<!-- 위험권한의 경우는checkpermission을 통해 사용자에게 동의를 받아야 함. -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<!-- 일반권한의 경우는 선언만 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


<!-- ContextCompat을 사용하기 위해 gradle(app) dependencies -->
implementation 'com.android.support:appcompat-v7:27.1.0'


<!-- Activity -->
private static final int MULTIPLE_PERMISSIONS = 101;
private String[] permissions = {Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, Manifest.permission.WRITE_EXTERNAL_STORAGE};


<!-- Activity Oreo이상일 때만 처리 -->
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
    checkPermission();
}


<!-- checkPermission -->
private boolean checkPermission(){

int result;
List<String> permissionList = new ArrayList<>();

for(String pm: permissions){
    result = ContextCompat.checkSelfPermission(this, pm);
    if(result != PackageManager.PERMISSION_GRANTED){
permissionList.add(pm);
    }
}

if(!permissionList.isEmpty()){
    ActivityCompat.requestPermissions(this, permissions, MULTIPLE_PERMISSIONS);
    return false;
}

return true;
}


<!-- 권한 체크 후 확인 (권한 설정을 안하면 닫는 로직으로 되어 있음) -->
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
    case MULTIPLE_PERMISSIONS:
if(grantResults.length > 0){
    for(int i=0; i<permissions.length; i++){
if(grantResults[i] != PackageManager.PERMISSION_GRANTED){
showToastPermission();
}
    }
}else {
    showToastPermission();
}

break;
}
}

<!-- toast -->
private void showToastPermission(){
Toast.makeText(this, getString(R.string.permission_toast), Toast.LENGTH_SHORT).show();
finish();
}

728x90
반응형

'AOS' 카테고리의 다른 글

보안(서버도메인 등)  (0) 2021.06.01
보안(서버도메인 등)  (0) 2021.06.01
google_fitness  (0) 2021.06.01
Firebase Analytics vs Google Analytics  (0) 2021.06.01
Android 안드로이드 - DatePicker Dialog Theme  (0) 2020.05.04