-
권한 요청 샘플(런타임 권한 요청 X)안드로이드(스튜디오)/막 써 2018. 8. 14. 10:25반응형
Permission_Sample_Activity.java
package com.abyser.activity;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PermissionInfo;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.widget.Toast;
import com.abyser.R;
import java.util.ArrayList;
/**
* 권한 확인 및 요청 클래스.
* Created by abyser on 2017-06-07.
*/
public class Permission_Sample_Activity extends Activity {
/** 로그 태그 */
private static final String LOG_TAG = Permission_Sample_Activity.class.getSimpleName();
/** 확인 및 요청 할 권한들 */
private static final String[] PERMISSIONS = {
android.Manifest.permission.INTERNET,
android.Manifest.permission.ACCESS_NETWORK_STATE,
android.Manifest.permission.CHANGE_NETWORK_STATE,
android.Manifest.permission.ACCESS_WIFI_STATE,
android.Manifest.permission.CHANGE_WIFI_STATE,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
android.Manifest.permission.READ_EXTERNAL_STORAGE,
android.Manifest.permission.CAMERA,
android.Manifest.permission.CALL_PHONE,
android.Manifest.permission.READ_PHONE_STATE,
android.Manifest.permission.ACCESS_COARSE_LOCATION,
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.WAKE_LOCK,
android.Manifest.permission.VIBRATE,
};
/** 다음으로 진행 할 액티비티 클래스 */
private static final Class<?> NEXT_ACTIVITY = Activity_Main.class;
/** 권한 요청 코드 */
private static final int REQUEST_PERMISSION_CODE = 0;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_permission);
initPermission();
}
/**
* 초기 권한 확인 및 요청.
*/
private void initPermission(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
ArrayList<String> deniedPermissionList = new ArrayList<String>();
// 방법 1
for (int i = 0; i < PERMISSIONS.length; i++) {
if (checkSelfPermission(PERMISSIONS[i]) != PackageManager.PERMISSION_GRANTED) {
deniedPermissionList.add(PERMISSIONS[i]);
}
}
// 방법 2(실제 모든 권한이 다 가져와지는지 확인 필요. 오류 발생하여 null 반환시 처리에 대한 방안 마련 필요.)
// String[] manifestPermissions = getAndroidManifestUsesPermissionList();
// for (int i = 0; i < PERMISSIONS.length; i++) {
//
// if (checkSelfPermission(PERMISSIONS[i]) != PackageManager.PERMISSION_GRANTED) {
// deniedPermissionList.add(PERMISSIONS[i]);
// }
//
// }
if (deniedPermissionList.size() > 0) {
requestPermissions(deniedPermissionList.toArray(new String[deniedPermissionList.size()]), REQUEST_PERMISSION_CODE);
}else{
doIfRequestPermissionGranted();
}
}else{
doIfRequestPermissionGranted();
}
}
/**
* AndroidManifest.xml에 uses-permission 태그로 정의 된 권한명 리스트 반환.
* @return AndroidManifest.xml에 uses-permission 태그로 정의 된 권한명 리스트
*/
private String[] getAndroidManifestUsesPermissionList(){
String[] permissionList = null;
try{
PackageManager packageManager = getPackageManager();
PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), PackageManager.GET_PERMISSIONS);
permissionList = packageInfo.requestedPermissions;
}catch (PackageManager.NameNotFoundException e){
e.printStackTrace();
permissionList = null;
}catch (Exception e){
e.printStackTrace();
permissionList = null;
}
return permissionList;
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
if(requestCode == REQUEST_PERMISSION_CODE){
for(int i=0; i<permissions.length; i++){
if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
doIfRequestPermissionDenied();
return;
}
}
doIfRequestPermissionGranted();
}
}
/**
* 권한 요청 후 사용자가 권한을 하나라도 거절하였을 경우 이벤트.
*/
private void doIfRequestPermissionDenied(){
Toast.makeText(Permission_Sample_Activity.this, "권한을 허용하여야 앱을 사용 가능합니다.", Toast.LENGTH_SHORT).show();
finish();
}
/**
* 권한 요청 후 사용자가 모든 권한을 수락하였을 경우 이벤트.
*/
private void doIfRequestPermissionGranted(){
Intent i = new Intent(Permission_Sample_Activity.this, NEXT_ACTIVITY);
startActivity(i);
finish();
}
}Activity_permission.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:orientation="vertical">
</LinearLayout>반응형'안드로이드(스튜디오) > 막 써' 카테고리의 다른 글
파일 복사 붙여넣기 메소드 (0) 2018.10.24 LocationManager 샘플(추가 정의 필요) (2) 2018.09.30 release apk 빌드시 Could not find com.android.tools.lint:lint-gradle:xx.x.x. 오류 (0) 2018.07.25 서비스 실행 중 여부 확인 메소드 (0) 2018.07.18 배터리 충전 여부 확인 메소드 (0) 2018.06.15