SPRING :: NOTE
[ANDROID] 안드로이드 6.0(마쉬멜로우)이상 퍼미션 본문
반응형
하단 소스를 불러오면 된다. (하단은 카메라와 파일쓰기 권한)
그럼 해당 소스를 넣은 부분을 불러오기 전에 퍼미션을 확인한다.
이것때문에 엄청 헤맸다. (4.0전까지만 개발해봐서...)
private boolean hasPermissions() {
int res = 0;
// list all permissions which you want to check are granted or not.
String[] permissions = new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE};
for (String perms : permissions) {
res = checkCallingOrSelfPermission(perms);
if (!(res == PackageManager.PERMISSION_GRANTED)) {
// it return false because your app dosen't have permissions.
return false;
}
}
// it return true, your app has permissions.
return true;
}
private void requestNecessaryPermissions() {
// make array of permissions which you want to ask from user.
String[] permissions = new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE};
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// have arry for permissions to requestPermissions method.
// and also send unique Request code.
requestPermissions(permissions, REQUEST_CODE_STORAGE_PERMS);
}
}
/* when user grant or deny permission then your app will check in
onRequestPermissionsReqult about user's response. */
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grandResults) {
// this boolean will tell us that user granted permission or not.
boolean allowed = true;
switch (requestCode) {
case REQUEST_CODE_STORAGE_PERMS:
for (int res : grandResults) {
// if user granted all required permissions then 'allowed' will return true.
allowed = allowed && (res == PackageManager.PERMISSION_GRANTED);
Toast.makeText(this, "Camera permission granted", Toast.LENGTH_SHORT).show();
}
break;
default:
// if user denied then 'allowed' return false
Toast.makeText(this, "Camera permission denied", Toast.LENGTH_SHORT).show();
allowed = false;
break;
}
if (allowed) {
// if user granted permissions then do your work.
//startCamera();
doRestart(this);
} else {
// else give any custom waring message.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (shouldShowRequestPermissionRationale(Manifest.permission.CAMERA)) {
Toast.makeText(MainActivity.this, "Camera Permissions denied", Toast.LENGTH_SHORT).show();
} else if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
Toast.makeText(MainActivity.this, "Storage Permissions denied", Toast.LENGTH_SHORT).show();
}
}
}
}
적용 소스
if(!hasPermissions())
{
requestNecessaryPermissions();
}
+ 추가
doRestart();
public static void doRestart(Context c) {
//http://stackoverflow.com/a/22345538
try {
//check if the context is given
if (c != null) {
//fetch the packagemanager so we can get the default launch activity
// (you can replace this intent with any other activity if you want
PackageManager pm = c.getPackageManager();
//check if we got the PackageManager
if (pm != null) {
//create the intent with the default start activity for your application
Intent mStartActivity = pm.getLaunchIntentForPackage(
c.getPackageName()
);
if (mStartActivity != null) {
mStartActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//create a pending intent so the application is restarted after System.exit(0) was called.
// We use an AlarmManager to call this intent in 100ms
int mPendingIntentId = 223344;
PendingIntent mPendingIntent = PendingIntent
.getActivity(c, mPendingIntentId, mStartActivity,
PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager mgr = (AlarmManager) c.getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, mPendingIntent);
//kill the application
System.exit(0);
} else {
Log.e(TAG, "Was not able to restart application, mStartActivity null");
}
} else {
Log.e(TAG, "Was not able to restart application, PM null");
}
} else {
Log.e(TAG, "Was not able to restart application, Context null");
}
} catch (Exception ex) {
Log.e(TAG, "Was not able to restart application");
}
}
포스팅이 유용하였다면, 아래 공감버튼을 한번씩 눌러주세요.
반응형
'Development Language > JAVA · ANDROID' 카테고리의 다른 글
[ANDROID] Error while Launching activity (0) | 2017.06.16 |
---|---|
[ANDROID] 카메라로 찍은 Bitmap에 텍스트를 추가하여 저장하기 (13) | 2017.06.16 |
[AChartEngene] 라이브러리 사용법 (0) | 2016.09.13 |
[java/android] 현재시간 가져오기 (1) | 2016.06.23 |
[ANDROID] LinearLayout 옵션 (0) | 2016.06.23 |
Comments