نحوه دسترسی به Permission ها در api23 کمی فرق کرده و همینطور که خودتون گفتید باید از Run-time Permission استفاده کنید
برای استفاده از 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( Manifest.permission.ACCESS_FINE_LOCATION )
این تابع لیست Permission های مورد نیاز ما رو به کاربر ارسال میکنه.
کد پیاچپی:
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);
}
}
}