معرفی یک کلاس برای بررسی RunTimePermission در اندروید

سلام دوستان در این سری از آموزش برنامه نویسی اندروید به معرفی یک کلاس برای بررسی RunTimePermission در اندروید می پردازیم شاید آموزش های مختلفی در مورد دسترسی هنگام اجرا RunTimePermission قرار دادیم در امروز یک کلاس Utils کمکی را به شما معرفی می کنیم تا به راحتی دسترسی ها را چک کنید و درگیر کدهای پیچیده آن نشوید در ادامه با ما همراه باشید.
 
ابتدا یک کلاس به نام PermissionUtil.java ایجاد کنید و کدهای زیر را در آن قرار دهید.

public class PermissionUtil {
    public static boolean shouldAskPermission() {
        return (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M);
    }
private static boolean shouldAskPermission(Context context, String permission){
        if (shouldAskPermission()) {
            int permissionResult = ActivityCompat.checkSelfPermission(context, permission);
            if (permissionResult != PackageManager.PERMISSION_GRANTED) {
                return true;
            }
        }
        return false;
    }
public static void checkPermission(Context context, String permission, PermissionAskListener listener){
        if (shouldAskPermission(context, permission)){
            if (((Activity)context).shouldShowRequestPermissionRationale(permission)) {
                listener.onPermissionPreviouslyDenied();
            } else {
if (PreferencesUtil.isFirstTimeAskingPermission(context, permission)) {
                    PreferencesUtil.firstTimeAskingPermission(context, permission, false);
                    listener.onPermissionAsk();
                } else {
                    listener.onPermissionDisabled();
                }
            }
        } else {
            listener.onPermissionGranted();
        }
    }
    public interface PermissionAskListener {
        void onPermissionAsk();
        void onPermissionPreviouslyDenied();
        void onPermissionDisabled();
        void onPermissionGranted();
    }
}

در بالا خطا دارید ولی خب اشکال ندارد ادامه آموزش را دنبال کنید مشکل حل می شود در بالا یک متود به نام shouldAskPermission وجود دارد که بررسی می کند آیا گوشی نیازمند RunTimePermission است یا خیر چون از اندروید M نیازمند RunTimePermission است. متود بعدی shouldAskPermission که ورودی آن یک Context و String مربوط به آن Permission است.
یک کلاس دیگر به نام PreferenceUtil.java ایجاد کنید و کدهای زیر را در  آن قرار دهید.

public static void firstTimeAskingPermission(Context context, String permission, boolean isFirstTime){
SharedPreferences sharedPreference = context.getSharedPreferences(PREFS_FILE_NAME, MODE_PRIVATE;
 sharedPreference.edit().putBoolean(permission, isFirstTime).apply();
 }
public static boolean isFirstTimeAskingPermission(Context context, String permission){
return context.getSharedPreferences(PREFS_FILE_NAME, MODE_PRIVATE).getBoolean(permission, true);
}

در ادامه نحوه استفاده از آن را خواهید دید.

PermissionUtil.checkPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    new PermissionUtil.PermissionAskListener() {
                        @Override
                        public void onPermissionAsk() {
                            ActivityCompat.requestPermissions(
                                    thisActivity,
              new String[]{Manifest.permission.READ_CONTACTS},
                            REQUEST_EXTERNAL_STORAGE
                            );
                        }
                        @Override
                        public void onPermissionPreviouslyDenied() {
                       //show a dialog explaining permission and then request permission
                        }
                        @Override
                        public void onPermissionDisabled() {
                           Toast.makeText(context, "Permission Disabled.", Toast.LENGTH_SHORT).show();
                        }
                        @Override
                        public void onPermissionGranted() {
                            readContacts();
                        }
                    });

به همین سادگی می توانید دسترسی را چک کنید فقط دسترسی را حتما در AndroidManifest باید تعریف کنید.
 
موفق باشید.
 

مطالعه بیشتر