PermissionsDispatcher takes care of special permissions Manifest.permission.SYSTEM_ALERT_WINDOW
and Manifest.permission.WRITE_SETTINGS
.
The following sample is to grant SYSTEM_ALERT_WINDOW
.
Add the following line to AndroidManifest.xml
:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
It's the same as other permissions:
@RuntimePermissions
public class MainActivity extends AppCompatActivity {
@NeedsPermission(Manifest.permission.SYSTEM_ALERT_WINDOW)
void systemAlertWindow() {
}
@OnShowRationale(Manifest.permission.SYSTEM_ALERT_WINDOW)
void systemAlertWindowOnShowRationale(final PermissionRequest request) {
}
@OnPermissionDenied(Manifest.permission.SYSTEM_ALERT_WINDOW)
void systemAlertWindowOnPermissionDenied() {
}
@OnNeverAskAgain(Manifest.permission.SYSTEM_ALERT_WINDOW)
void systemAlertWindowOnNeverAskAgain() {
}
}
Unlike other permissions, special permissions require to call the delegation method at onActivityResult
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button_system_alert_window).setOnClickListener(v -> {
// NOTE: delegate the permission handling to generated method
MainActivityPermissionsDispatcher.systemAlertWindowWithPermissionCheck(this);
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
MainActivityPermissionsDispatcher.onActivityResult(this, requestCode);
}