Advanced Permission manager کتابخانه ای متن باز است که توسط آن از شر تمامی دردسر های مجوز های درحال اجرای اندروید خلاص می شوید. همانطور که می دانید تعدادی مجوز در اندروید جزو مجوز های خطرناک است که برای استفاده از آنها علاوه بر منیفست باید در حال اجرا نیز اجازه کاربر را بگیرید و روند گوناگونی دارد. لیست مجوز های خطرناک به شرح ذیل است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
READ_CALENDAR WRITE_CALENDAR CAMERA READ_CONTACTS WRITE_CONTACTS GET_ACCOUNTS ACCESS_FINE_LOCATION ACCESS_COARSE_LOCATION RECORD_AUDIO READ_PHONE_STATE CALL_PHONE READ_CALL_LOG WRITE_CALL_LOG ADD_VOICEMAIL USE_SIP PROCESS_OUTGOING_CALLS BODY_SENSORS SEND_SMS RECEIVE_SMS READ_SMS RECEIVE_WAP_PUSH RECEIVE_MMS READ_EXTERNAL_STORAGE WRITE_EXTERNAL_STORAGE |
حال ممکن است کاربر نه تنها اجازه ندهد بلکه گزینه “دیگر نشان نده” را انتخاب کند و برای رسیدگی کردن به این قضیه، چک های مختلفی انجام داد که خوشبختانه کتابخانه Advanced Permission manager همه این موارد را به عهده می گیرد.
برای استفاده از این کتابخانه خط زیر را به گریدل برنامه اضافه کنید:
1 |
compile 'ir.mtajik.android:advancedPermissionsHandler:1.0.6' |
کافی است Activity خود را از PermissionHandlerActivity ارث بری کنید. سپس متد زیر را صدا کنید و دیگر نگران برسی کردن مجوز و مراحل دست و پا گیر آن نباشید. همه آن را کتابخانه بصورت اتومات مدیریت می کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
String[] permissions = new String[] {Manifest.permission.SEND_SMS, Manifest.permission.WRITE_EXTERNAL_STORAGE , Manifest.permission.READ_EXTERNAL_STORAGE , ...} boolean stickyMode = true; askForPermission(permissions , stickyMode, new PermissionCallBack() { @Override public void onPermissionsGranted() { Log.i("mahdi", "onPermissionsGranted: "); } @Override public void onPermissionsDenied(String[] permissions) { Log.i("mahdi", "onPermissionsDenied: "); } }); |
روند گرفتن مجوز بدین شکل است:
اول: برنامه اجازه تمامی مجوز های خواسته شده را به کاربر نمایش می دهد.
دوم: سپس مجوزهای داده نشده در مرحله قبل با یک دیالوگ دیگر با پیغام جدید از کاربر خواسته می شود.
سوم: اگر کاربر گزینه “دیگر به من نمایش نده” را انتخاب کرده باشد، تنظیمات برای گرفتن مجوزها باز می شود.
چهارم: اگر همچنان کاربر مجوز نداد، کالبک onPermissionsDenied فراخوانی می شود.
حال stickyMode مشخص می کند که تمام مراحل بالا در یک نشست اتفاق بیافتد یا اینکه خیر. استفاده از این کتابخانه باعث میشه که بدون نگرانی بابت مجوزها به قسمت های دیگر برنامه بپردازید. اگر درمورد پیاده سازی نکته، پیشنهاد، مشکل یا سوالی داشتید خوشحال می شم تا با من درمیان بگذارید.
لینک پروژه در Github
https://github.com/mahdit83/advancedSmsManager
لینک پروژه در Bintray
https://bintray.com/mahdi/maven/advancedsmsmanager
لینک در android-arsenal
برای استفاده در فرگمنتها باید چطور عمل کرد
کافیه اکتیویتی رو گرفته و متد ها رو کال کنید.
askForPermission.((MainActivity)getactivity())
متاسفانه در کامنت نمیشه کد رو درست زد چون بهم میریزه ولی امیدوارم متوجه شده باشید.
ممنون
متوجه شدم