۱۳۹۵/۰۲/۱۴, ۰۹:۰۰ ق.ظ
نحوه دسترسی به Permission ها در api23 کمی فرق کرده و همینطور که خودتون گفتید باید از Run-time Permission استفاده کنید
برای استفاده از Run-Time Permission باید ابتدا یک در خواست Permission به کاربر ارسال کنید
در کد بالا نحوه تعریف و ارسال درخواست permission به کاربر نوشته شده.
چند تابع مهم هستند که لازمه کار آنها رو بدونید
این تابع چک میکنه که آیا این درخواست قبلا ارسال شده و پاسخ Granted گرفته یا خیر
در صورتی که پاسخ Granted گرفته باشه دیگه درخواست ارسال نمیشه. ( یعنی به لیست Permission های مورد نیاز برای راسال درخواست اضافه نمیشه )
یعنی در صورت دریافت پاسخ Granted از طرف کاربر مقدار True و در صورت عدم پذیرش از سمت کاربر و دریافت پاسخ Deniedمقدار False برمیگردونه
این تابع لیست Permission های مورد نیاز ما رو به کاربر ارسال میکنه.
این تابع هم نتایج پاسخ کاربر به درخواست Permission های ما رو برمیگردونه که آیا کاربر پاسخ Granted به درخواست ها داده یا Denied.
برای استفاده از Run-Time Permission باید ابتدا یک در خواست Permission به کاربر ارسال کنید
کد پیاچپی:
int hasLocationPermission = checkSelfPermission( Manifest.permission.ACCESS_FINE_LOCATION );
int hasSMSPermission = checkSelfPermission( Manifest.permission.SEND_SMS );
List<String> permissions = new ArrayList<String>();
if( hasLocationPermission != PackageManager.PERMISSION_GRANTED ) {
permissions.add( Manifest.permission.ACCESS_FINE_LOCATION );
}
if( hasSMSPermission != PackageManager.PERMISSION_GRANTED ) {
permissions.add( Manifest.permission.SEND_SMS );
}
if( !permissions.isEmpty() ) {
requestPermissions( permissions.toArray( new String[permissions.size()] ), REQUEST_CODE_SOME_FEATURES_PERMISSIONS );
}
در کد بالا نحوه تعریف و ارسال درخواست permission به کاربر نوشته شده.
چند تابع مهم هستند که لازمه کار آنها رو بدونید
این تابع چک میکنه که آیا این درخواست قبلا ارسال شده و پاسخ Granted گرفته یا خیر
در صورتی که پاسخ Granted گرفته باشه دیگه درخواست ارسال نمیشه. ( یعنی به لیست Permission های مورد نیاز برای راسال درخواست اضافه نمیشه )
یعنی در صورت دریافت پاسخ Granted از طرف کاربر مقدار True و در صورت عدم پذیرش از سمت کاربر و دریافت پاسخ Deniedمقدار False برمیگردونه
کد پیاچپی:
checkSelfPermission
کد پیاچپی:
checkSelfPermission( Manifest.permission.ACCESS_FINE_LOCATION )
این تابع لیست Permission های مورد نیاز ما رو به کاربر ارسال میکنه.
کد پیاچپی:
requestPermissions
کد پیاچپی:
requestPermissions( permissions.toArray( new String[permissions.size()] ), REQUEST_CODE_SOME_FEATURES_PERMISSIONS );
این تابع هم نتایج پاسخ کاربر به درخواست Permission های ما رو برمیگردونه که آیا کاربر پاسخ Granted به درخواست ها داده یا Denied.
کد پیاچپی:
onRequestPermissionsResult
کد پیاچپی:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch ( requestCode ) {
case REQUEST_CODE_SOME_FEATURES_PERMISSIONS: {
for( int i = 0; i < permissions.length; i++ ) {
if( grantResults[i] == PackageManager.PERMISSION_GRANTED ) {
Log.d( "Permissions", "Permission Granted: " + permissions[i] );
} else if( grantResults[i] == PackageManager.PERMISSION_DENIED ) {
Log.d( "Permissions", "Permission Denied: " + permissions[i] );
}
}
}
break;
default: {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
}