ในกรณีที่ขอสิทธิ แล้ว user ไม่ให้สิทธิ เมื่อ user เข้าใช้งานครั้งต่อไป ก็จะขึ้น dialog ขึ้นมาถาม user ใหม่ และถ้า user ไม่ให้สิทธิและไม่ให้ถามอีก ก็จะมี dialog มาแนะนำให้ user ไปหน้า setting ของ app เพื่อปรับเปลี่ยนสิทธิให้ app
build.gradle (Module: app)
apply plugin: 'com.android.application' android { compileSdkVersion 29 buildToolsVersion "29.0.0" defaultConfig { applicationId "com.phaisarn.myapplication" minSdkVersion 21 targetSdkVersion 29 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.0.2' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'pub.devrel:easypermissions:3.0.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' }
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:dist="http://schemas.android.com/apk/distribution" package="com.phaisarn.myapplication"> <dist:module dist:instant="true" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <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/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
บรรทัดที่ 8-9 : ขอ Permission
MainActivity.java
package com.phaisarn.myapplication; import androidx.appcompat.app.AppCompatActivity; import android.Manifest; import android.content.Intent; import android.os.Bundle; import android.provider.MediaStore; import android.util.Log; import android.widget.Toast; import java.util.List; import pub.devrel.easypermissions.AppSettingsDialog; import pub.devrel.easypermissions.EasyPermissions; public class MainActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks { private static final String TAG = "MyLog"; private static final int REQUEST_CAMERA_PERMISSION = 1; private static final String[] PERM_CAMERA = {Manifest.permission.CAMERA}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (EasyPermissions.hasPermissions(MainActivity.this, PERM_CAMERA)) { // Granted, To Do ... Log.d(TAG, "Granted, To Do ..."); imageCapture(); } else { EasyPermissions.requestPermissions( this, "This app needs access to your camera so you can take pictures.", REQUEST_CAMERA_PERMISSION, PERM_CAMERA); } } private void imageCapture() { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //... startActivityForResult(intent, 999); } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); Log.d(TAG, "onRequestPermissionsResult:"); // Forward results to EasyPermissions EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); } @Override public void onPermissionsGranted(int requestCode, List<String> perms) { // Some permissions have been granted // ... Log.d(TAG, "onPermissionsGranted:" + requestCode + ":" + perms.size()); imageCapture(); } @Override public void onPermissionsDenied(int requestCode, List<String> perms) { // Some permissions have been denied // ... Log.d(TAG, "onPermissionsDenied:" + requestCode + ":" + perms.size()); // (Optional) Check whether the user denied any permissions and checked "NEVER ASK AGAIN." // This will display a dialog directing them to enable the permission in app settings. if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) { new AppSettingsDialog.Builder(this).build().show(); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE) { // Do something after user returned from app settings screen, like showing a Toast. Toast.makeText(this, "Finish settings", Toast.LENGTH_SHORT).show(); } } }
Link