معرفی یک کلاس برای بررسی RunTimePermission در اندروید
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به معرفی یک کلاس برای بررسی RunTimePermission در اندروید می پردازیم شاید آموزش های مختلفی در مورد دسترسی هنگام اجرا RunTimePermission قرار دادیم در امروز یک کلاس Utils کمکی را به شما معرفی می کنیم تا به راحتی دسترسی ها را چک کنید و درگیر کدهای پیچیده آن نشوید در ادامه با ما همراه باشید.
ابتدا یک کلاس به نام PermissionUtil.java ایجاد کنید و کدهای زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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 ایجاد کنید و کدهای زیر را در آن قرار دهید.
1 2 3 4 5 6 7 | 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); } |
در ادامه نحوه استفاده از آن را خواهید دید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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 باید تعریف کنید.
موفق باشید.
سلام
آیا اجباری برای استفاده از RunTime Permisson در برنامه هست ؟
من در فایل مانیفست دسترسی خواندن و نوشتن در حافظه را دادم روی گوشی با اندروید 5 وقتی دستور زیر را چک میکنم
sd.canWrite();
جواب true هست ولی روی جنی موشن با اندروید 7 که چک میکنم فالس میده
سلام بله اجباری هست.
سلام. واسه دستور if (((Activity)context).shouldShowRequestPermissionRationale(permission)) پیغام میده نیازمند api level 23 هست.باید چیکار کنیم؟
ممنون