반응형
Permission
마시맬로 버전 이후부터는 퍼미션 등록뿐 아니라, 사용자가 사용하기 전 퍼미션 안내 및 등록 및 직접 설정
종류
일반권함
위험권한
액티비티를 실행하거나 버튼을 누르거나 어떤 기능을 사용할 때 권한에 대한 처리를 할 수 있도록 구현
사용 메소드
checkSelfPermission : 퍼미션의 현재 상태를 확인하는 메소드
- PERMISSION_DENIED : 퍼미션이 부여되지 않은 상태 - PERMISSION_GRANTED : 퍼미션이 부여되지 있는 상태
requestPermissions : (checkSelfPermission : PERMISSION_DENIED )권한이 체크되어 있지 않은 경우에 권한을 요청하는 메시지를표시
(이 메소드 이외에도 제공되는 메소드는 여러개임)
onRequestPermissionsResult : requestPermission의 결과로 호출되는 메소드
// 퍼미션 설정 정보를 매개변수로 넘긴다. int requestCode : 퍼미션 요청할 때 넘긴 요청코드 String[] permissions : 요청퍼미션 목록 int[] grantResults :퍼미션 설정 성공 결과
처리 순서
현재 사용하려고 하는 권한이 설정되어 있는지 체크
=> checkSelfPermission 을 이용
1번에서 리턴값이 PERMISSION_DENIED 인 경우 사용자가 권한을 설정할 수 있도록 메시지를 표시
=> requestPermissions
요청 처리 후 자동으로 호출되는 메소드를 통해 다음에 어떤 처리를 할 것인지 정의
- 권한 성공 : 기능이 실행되도록
- 권한 실패 : Preference를 통해 설정할 수 있도록 Activity를 이동하거나 안내 메시지 출력
사용자 정의 Permmision
<uses-permission android:name="com.exam.permission.JAVA_PERMISSION" /> // 뷰에 대한 권한 설정 ((사용자))
<uses-permission android:name="android.permission.INTERNET"/> // 인터넷 권한 설정(( 일반 ))
<uses-permission android:name="android.permission.CAMERA"/> // 카메라 권한 설정 (( 위험 ))
<application android:usesCleartextTraffic="true" /> // 문자열 통신 text에 대한 설정
- 권한을 테스트할 때는 번거롭더라도 앱을 삭제하고 다시 실행하기
public class RuntimePermissionTest extends AppCompatActivity {
//퍼미션의 상태를 저장할 변수
boolean permission_state; //초기값 false
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_runtime_permission_test);
// 1. Permission 먼저 체크
if(ContextCompat.checkSelfPermission(this,
Manifest.permission.CAMERA)== PackageManager.PERMISSION_GRANTED){
permission_state = true;
printToast("권한이 설정되었습니다.");
}else{
permission_state = false;
printToast("권한을 설정해야 합니다.");
// 2. 권한이 없는 경우 권한을 설정하는 메시지를 띄운다.
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA},
1000);
}
}
// 3. requestPermissions의 메시지창에서 선택한 후 호출되는 메소드
// 결과를 리턴 - 결과에 따라 다르게 처리할 수 있도록 구현
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode==1000 && grantResults.length>0){ //권한의 성공설정에 대한 결과가 있다는 의미
if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
permission_state = true;
printToast("권한 설정 마무리 완료~");
}else{
printToast("권한 설정을 하지 않았으므로 기능으 사용할 수 없습니다.");
}
}
}
public void printToast(String msg){
Toast.makeText(this,msg,Toast.LENGTH_LONG).show();
}
public void runCamera(View v){
if(permission_state){
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivity(intent);
}else{
printToast("권한을 설정해야 기능을 사용할 수 있습니다.");
//권한을 설정할 수 있는 Activity로 자동 이동되도록
//(사용자로 하여금 권한을 다시 설정할 수 있도록 만들기)
}
}
}
반응형
'안드로이드 프로그래밍 > [ Android Framework ]' 카테고리의 다른 글
[ Android ] 06. 안드로이드에서 Map(지도) 이용하기 (0) | 2020.08.12 |
---|---|
[ Android ] 05. 안드로이드의 FileSystem (0) | 2020.08.12 |
[ Android ] 03. 화면전환을 위한 Intent (0) | 2020.08.12 |
[ Android ] 02. 사용자정의 adapter와 layout inflation (2) | 2020.08.11 |
[ Android ] 01. 각종 위젯과 이벤트처리방법 & AdapaterView (0) | 2020.08.11 |