안드로이드 6.0 버전 이상부터 권한 체크 기능을 선택할 수 있도록 만들었다.
앱에서 해당 권한이 필요할때마다 사용자로부터 권한을 허가받도록 변경되었다.
사용자가 권한을 허가했더라도 사용자는 설정화면(설정 > 애플리케이션 > 앱이름 > 권한)을 통해 언제든지 권한을 허용/거부 할 수 있다.
테드 퍼미션 설정 방법 코드 : https://link2me.tistory.com/1509
아래 코드로 해도 되지만 테드 퍼미션 사용하고 부터는 이걸로 활용하고 있다.
개별로 설정해서 사용하다가 다른 자료를 찾다가 코드에 포함된 걸 발견하고 테스트해보니 아주 잘된다.
이 코드만 활용하면 퍼미션 지정때문에 골치아플 일은 없을 것이다.
1. 먼저 알아야 할 사항은 AndroidManifest.xml 에 권한 옵션이 추가되어 있어야 한다.
아래 코드가 전부 필요한 것이 아니다. 필요한 것만 이용하면 된다.
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.VIBRATE" /> <!-- 전화걸려올경우 상대방 정보 확인 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.MODIFY_PHONE_READ" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.RECEIVE_MMS" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.WRITE_SMS" /> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> |
2. java 코드에서 멀티 퍼미션 설정코드
멀티퍼미션에 항목이 6개 이지만 실제로는 5개를 설정하도록 나온다. (동일 권한체크를 알아서 배제하더라)
public class Login extends Activity { // 멀티 퍼미션 지정 private String[] permissions = { Manifest.permission.READ_PHONE_STATE, Manifest.permission.CALL_PHONE, // 전화걸기 및 관리 Manifest.permission.WRITE_CONTACTS, // 주소록 액세스 권한 Manifest.permission.WRITE_EXTERNAL_STORAGE, // 기기, 사진, 미디어, 파일 엑세스 권한 Manifest.permission.RECEIVE_SMS, // 문자 수신 Manifest.permission.CAMERA }; private static final int MULTIPLE_PERMISSIONS = 101;
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login);
if (Build.VERSION.SDK_INT >= 23) { // 안드로이드 6.0 이상일 경우 퍼미션 체크 checkPermissions(); }
}
private boolean checkPermissions() { 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, permissionList.toArray(new String[permissionList.size()]), MULTIPLE_PERMISSIONS); return false; } return true; }
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { switch (requestCode) { case MULTIPLE_PERMISSIONS: { if (grantResults.length > 0) { for (int i = 0; i < permissions.length; i++) { if (permissions[i].equals(this.permissions[i])) { if (grantResults[i] != PackageManager.PERMISSION_GRANTED) { showToast_PermissionDeny(); } } } } else { showToast_PermissionDeny(); } return; } }
}
private void showToast_PermissionDeny() { Toast.makeText(this, "권한 요청에 동의 해주셔야 이용 가능합니다. 설정에서 권한 허용 하시기 바랍니다.", Toast.LENGTH_SHORT).show(); finish(); }
} |
위 코드는 http://programmar.tistory.com/5 에 링크된 GitHub 소스에 포함되어 있던 건데 아주 약간 수정했다.
소스코드 첨부 (퍼미션 지정에 필요한 코드만 발췌 수정)
PermissionChk.java
개별로 사용하던 퍼미션 설정 코드도 첨부해둔다.
PermissionCheck_Indivisual.java
라이브러리를 사용하는 것이 훨씬 더 편하므로 아래 사이트를 참조하면 좋다.
https://brunch.co.kr/@babosamo/50
퍼미션 라이브러리 관련 사이트
https://www.androidhive.info/2017/12/android-easy-runtime-permissions-with-dexter/
https://thanosfisherman.github.io/posts/mayi/
http://gun0912.tistory.com/61 TED Permission (추천)
https://hanburn.tistory.com/173 RxPermission (추천)