我将对旧应用程序的支持扩展到 Android 13,并且我看到了很多变化。 首先,我注意到
startActivityForResult
已被弃用,因为 Google 决定更改处理权限请求和结果的方式。
这里有几个例子: OnActivityResult 方法已被弃用,有什么替代方法?但老实说,我确实很清楚新方法是如何工作的。 只知道似乎使用了观察者模式。
这就是我目前请求覆盖权限的方式:
private void askForSystemOverlayPermission() {
if (!Settings.canDrawOverlays(this)) {
//If the draw over permission is not available open the settings screen
//to grant the permission.
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, DRAW_OVER_OTHER_APP_PERMISSION_REQUEST_CODE);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == DRAW_OVER_OTHER_APP_PERMISSION_REQUEST_CODE) {
if (!Settings.canDrawOverlays(this)) {
//Permission is not available. Display error text.
errorToastDrawOverOtherApp();
finish();
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
这就是我更新代码的方式:
ActivityResultLauncher<Intent> activityResultLaunch = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
System.out.println("Code:"+result.getResultCode());
if (result.getResultCode() == RESULT_CODE_1) {
// ToDo : Do your stuff...
} else if(result.getResultCode() == RESULT_CODE_2) {
// ToDo : Do your stuff...
}
}
});
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
activityResultLaunch.launch(intent);
}
但是就像前面提到的,我得到的结果总是 = 0。我做错了什么?
这就是我目前请求覆盖权限的方式
您正在使用
startActivityForResult()
。 该 Intent
操作未记录为返回结果。
我总是得到结果 = 0
该
Intent
操作未记录为返回结果,因此 0
是预期值。