2016-05-02 1 views
0

Я проверяю разрешение, используя следующий код. Я всегда добираюсь до той части, где shouldShowRequestPermissionRationale истинно. Затем отображается тост, но диалог разрешения не отображается.ActivityCompat.requestPermissions не вызван

// checking permission 
    if (ContextCompat.checkSelfPermission(this, 
      "android.permission.WRITE_SETTINGS") 
      != PackageManager.PERMISSION_GRANTED) { 

     // Should we show an explanation? 
     if (ActivityCompat.shouldShowRequestPermissionRationale(this, 
       "android.permission.WRITE_SETTINGS")) { 
      // Show an expanation to the user *asynchronously* -- don't block 
      // this thread waiting for the user's response! After the user 
      // sees the explanation, try again to request the permission. 
      Toast.makeText(this, "Please allow the app to change the settings otherwise the app cannot change the brightness for you", Toast.LENGTH_LONG).show(); 
      ActivityCompat.requestPermissions(this, 
        new String[]{"android.permission.WRITE_SETTINGS"}, 
        0); 
     } else { 
      // No explanation needed, we can request the permission. 
      ActivityCompat.requestPermissions(this, 
        new String[]{"android.permission.WRITE_SETTINGS"}, 
        0); 
     } 
    } 

Вот мое приложение модуль:

apply plugin: 'com.android.application' 

android { 
compileSdkVersion 23 
buildToolsVersion "23.0.2" 

defaultConfig { 
    applicationId "com.appsbyusman.brightnesscontrol" 
    minSdkVersion 15 
    targetSdkVersion 23 
    versionCode 1 
    versionName "1.0" 
} 
buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
} 
} 

dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
testCompile 'junit:junit:4.12' 
compile 'com.android.support:appcompat-v7:23.3.0' 
compile 'com.android.support:design:23.3.0' 
} 

В манифесте, я объявил разрешение:

<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 

Приложение отлично работает в Lollipop устройстве. Я прошу разрешения изменить яркость системы.

ответ

1

Я нашел ответ. Нам нужно запросить разрешение на изменение настроек другим способом. Нам нужно открыть мероприятие с помощью намерения, а затем пользователь сможет отложить наше приложение. Вот код:

// checking permission 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      if (!Settings.System.canWrite(this)) { 
       Toast.makeText(this, "Please allow the app to change the settings", Toast.LENGTH_LONG).show(); 
       Intent intentt = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS); 
       intentt.setData(Uri.parse("package:" + this.getPackageName())); 
       intentt.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       startActivity(intentt); 
      } else { 
       changeBrightness(extras); // it's android M and we have permission. Do permission related work here. 
      } 
     } else { 
      changeBrightness(extras); // It's pre android M and we have got permission at install time. Do permission related work here 
     }