[ėëëĄė´ë] ë°íėė ęļí 랴íŦíë ë°Šë˛
ë ę°ė§ ėí ėŊëę° ėë¤.
Case 1. íëė ęļíë§ ėė˛íë ėŧė´ė¤
Case 2. ë ę°ė§ ė´ėė ęļíė ėė˛íë ėŧė´ė¤
Case 1. íëė ęļíë§ ėė˛íë ėŧė´ė¤ ëė ėė
Case 1. íëė ęļíë§ ėė˛íë ėŧė´ė¤ ėŊë
ė´ ëļëļë§ ėļę°í´ ė¤ ę˛
<uses-permission android:name="android.permission.CAMERA"/>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.devshin93.runtimepermission">
<uses-permission android:name="android.permission.CAMERA"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.RuntimePermission">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
MainActivity.java
package com.devshin93.runtimepermission;
import android.Manifest;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
public class MainActivity extends AppCompatActivity {
private static final int SINGLE_PERMISSION = 1004;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
runtimeCheckPermission();
}
public void runtimeCheckPermission() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, SINGLE_PERMISSION);
} else {
Log.i("ęļí í
ė¤í¸", "ė˛ėëļí° ęļíė´ ėėė´ė.");
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case SINGLE_PERMISSION:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// ęļíė´ ė´ë¯¸ ėë ę˛Ŋė°
Log.i("ęļí í
ė¤í¸", "ėŦėŠėę° ęļíė ëļėŦí´ ė¤Ŧėĩëë¤.");
} else {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
alertDialog.setTitle("ėą ęļí ė¤ė ");
alertDialog.setMessage("ė¤ė ėŧëĄ ė´ëíŠëë¤.");
alertDialog.setPositiveButton("íė¸",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// ė´ ëļëļė ė¤ė ėŧëĄ ė´ëíë ėŊëė´ë¯ëĄ ėëëĄė´ë ė´ė랴ė ë˛ė ė ë°ëŧ ėė´í ė ėë¤.
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).setData(Uri.parse("package:" + getApplicationContext().getPackageName()));
startActivity(intent);
dialogInterface.cancel();
}
});
alertDialog.setNegativeButton("뎍ė", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.cancel();
}
});
alertDialog.show();
}
}
}
}
Case 2. ë ę°ė§ ė´ėė ęļíė ėė˛íë ėŧė´ė¤ ëė ėė
Case 2. ë ę°ė§ ė´ėė ęļíė ėė˛íë ėŧė´ė¤ ėŊë
ėŦ기ėë ė¸ëļė ėĨė(sdcard) ė read/write ęļíė ëļėŦíëëĄ íë¤. Android API Level 30 ëļí°ë ė ėŠė´ ė ëë ë¤ëĨ¸ ęļíėŧëĄ í ė¤í¸ í´ ëŗ´ęą°ë, í ė¤í¸ ë¨ë§ę¸°/ė ëŽŦë ė´í°ė ë˛ė ė ëŽėļė.
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.devshin93.runtimepermissions">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.RunTimePermissions">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
MainActivity.java
package com.devshin93.runtimepermissions;
import android.Manifest;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
public class MainActivity extends AppCompatActivity {
private static final int MULTIPLE_PERMISSION = 1004;
/**
* ė¸ëļė ėĨė (sdcard) ė read/write íë ėíė
ëë¤.
* Android API level 30 ëļí°ë sdcard ė ė ęˇŧė´ ëļę°í ė ėėĩëë¤.
* í
ė¤í¸íë ë¨ë§ę¸°/ė ëŽŦë ė´í°ė ë˛ė ė 30 미ë§ėŧëĄ ëŽėļęą°ë
* ėë PERMISSIONS ëĒŠëĄė CAMERA ëąėŧëĄ ëŗę˛Ŋíė늴 ëŠëë¤.
*/
private String[] PERMISSIONS = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (!runtimeCheckPermission(this, PERMISSIONS)) {
ActivityCompat.requestPermissions(this, PERMISSIONS, MULTIPLE_PERMISSION);
} else {
// ęļíė´ ėë ę˛Ŋė°..
Log.i("ęļí í
ė¤í¸", "ęļíė´ ėë¤ė");
}
}
public boolean runtimeCheckPermission(Context context, String... permissions) {
if (context != null && permissions != null) {
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
}
return true;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case MULTIPLE_PERMISSION:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// ęļíė´ ėë¤ëŠ´~
Log.i("ęļí í
ė¤í¸", "ėŦėŠėę° ęļíė ëļėŦí´ ė¤Ŧėĩëë¤.");
} else {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
alertDialog.setTitle("ėą ęļí ė¤ė ");
alertDialog.setMessage("ė¤ė ėŧëĄ ė´ëíŠëë¤.");
alertDialog.setPositiveButton("íė¸", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// ė´ ëļëļė ė¤ė ėŧëĄ ė´ëíë ėŊëė´ë¯ëĄ ėëëĄė´ë ė´ė랴ė ë˛ė ė ë°ëŧ ėė´í ė ėë¤.
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).setData(Uri.parse("package:" + getApplicationContext().getPackageName()));
startActivity(intent);
dialogInterface.cancel();
}
});
alertDialog.setNegativeButton("뎍ė", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.cancel();
}
});
alertDialog.show();
}
}
}
}