[안드로이드] API 23 앱 권한 설정


AndroidManifest.xml 에 있는 퍼미션 관련부분을 아래 코드에 적용하면 됩니다.

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

...

checkGranted();

}


@TargetApi(Build.VERSION_CODES.JELLY_BEAN)

public void checkGranted() {

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

if (PackageManager.PERMISSION_GRANTED != checkSelfPermission(Manifest.permission.INTERNET) ||

PackageManager.PERMISSION_GRANTED != checkSelfPermission(Manifest.permission.ACCESS_NETWORK_STATE) ||

PackageManager.PERMISSION_GRANTED != checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) ||

PackageManager.PERMISSION_GRANTED != checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) ||

PackageManager.PERMISSION_GRANTED != checkSelfPermission(Manifest.permission.READ_PHONE_STATE) ||

PackageManager.PERMISSION_GRANTED != checkSelfPermission(Manifest.permission.VIBRATE) ||

PackageManager.PERMISSION_GRANTED != checkSelfPermission(Manifest.permission.CAMERA)

) {

requestPermissions(new String[]{

Manifest.permission.INTERNET,

Manifest.permission.ACCESS_NETWORK_STATE,

Manifest.permission.WRITE_EXTERNAL_STORAGE,

Manifest.permission.READ_EXTERNAL_STORAGE,

Manifest.permission.READ_PHONE_STATE,

Manifest.permission.VIBRATE,

Manifest.permission.CAMERA},1);

} else {

}

}

}

@Override

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

super.onRequestPermissionsResult(requestCode, permissions, grantResults);

if (requestCode == 1) {

if (grantResults.length > 0) {

for (int i=0; i<grantResults.length; ++i) {

if (grantResults[i] == PackageManager.PERMISSION_DENIED) {

new AlertDialog.Builder(this).setTitle("알림").setMessage("권한을 허용하셔야 앱을 이용할 수 있습니다.")

.setPositiveButton("종료", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

dialog.dismiss();

finish();

}

}).setNegativeButton("권한 설정", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

dialog.dismiss();

checkGranted();

}

}).setCancelable(false).show();

return;

}

}

}

}

}

API 버전이 올라가니깐 이래저래 참 귀찮게 만드네요~


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

[안드로이드] FileUriExposedException 에러


아래와 같은 에러의 경우가 여러가지 원인이 있겠지만 카메라 촬영 후 앨범에서 여러장 선택해서 전달시 발생한 경우입니다.

E/AndroidRuntime(5472): android.os.FileUriExposedException: file:///storage/0000-0000/DCIM/Camera/20190304_113931_HDR.jpg exposed beyond app through Intent.getData()


이런 경우엔 아래 처럼 onCreate 에 넣어주니 에러가 안나는군요~

StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder(); 

StrictMode.setVmPolicy(builder.build());

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

builder.detectFileUriExposure();

}

API 23 부터 너무 짜증이 나네요~


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

[안드로이드] IllegalArgumentException root 에러


API 26 으로 올리고 구글 정책이 얼마나 바뀌었는지 짜증스럽네요~

E/AndroidRuntime(28534): java.lang.IllegalArgumentException: Failed to find configured root that contains


위와 같은 에러시 xml 파일에 아래와 같이 넣어주면 됩니다.


<?xml version="1.0" encoding="utf-8"?>

<paths xmlns:android="http://schemas.android.com/apk/res/android">

    <external-path name="storage/emulated/0" path="."/>

    <root-path name="root" path="."/>

</paths>

하나 하나 풀어나가기 힘들군요~


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,