ActivityResult 结果始终为零:由于 startActivityForResult 已弃用,因此使用新方法授予权限

问题描述 投票:0回答:1

我将对旧应用程序的支持扩展到 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。我做错了什么?

java android android-permissions onactivityresult
1个回答
0
投票

这就是我目前请求覆盖权限的方式

您正在使用

startActivityForResult()
Intent
操作未记录为返回结果

我总是得到结果 = 0

Intent
操作未记录为返回结果,因此
0
是预期值。

© www.soinside.com 2019 - 2024. All rights reserved.