我正在更新我们的应用程序,以使用新的M运行时权限系统。 除了onRequestPermissionsResult()之外,它都在工作。我需要检查按下按钮的权限,如果成功,就发送一条短信。当我授权这样做时,对话框会关闭,但直到我再次按下按钮,它才会触发“发送文本”。

我已经在onRequestPermissionsResult()方法中调试和设置了断点,但它从未进入它。

首先调用这个方法:

    private void askForPermission() {
    String[] permissions = new String[]{Manifest.permission.SEND_SMS};
    ActivityCompat.requestPermissions(getActivity(), permissions, PERMISSIONS_CODE);
}

然后我的回调函数是这样的:

    @Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    if (requestCode == PERMISSIONS_CODE) {
        for (int i = 0; i < permissions.length; i++) {
            String permission = permissions[i];
            int grantResult = grantResults[i];

            if (permission.equals(Manifest.permission.SEND_SMS)) {
                if (grantResult == PackageManager.PERMISSION_GRANTED) {
                    onPPSButtonPress();
                } else {
                    requestPermissions(new String[]{Manifest.permission.SEND_SMS}, PERMISSIONS_CODE);
                }
            }
        }
    }
}

有人遇到过类似的问题吗? 感谢任何帮助。 谢谢


当前回答

根据goodgamerguy的回答,解决方案是:

myFragment.this.requestPermissions(....)

其他回答

如果activity和fragment中都有onRequestPermissionsResult,请确保调用super。onRequestPermissionsResult in activity。它不是片段所需要的,但它是活动所需要的。

我希望它能正常工作

活动:

 ActivityCompat.requestPermissions(this,permissionsList,REQUEST_CODE);

对于片段:

 requestPermissions(permissionsList,REQUEST_CODE);

这会起作用的。

@Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

我还遇到了一个问题,即使你调用正确的requestPermissions,你仍然可以有这个问题。问题是父活动可能会在不调用super的情况下重写此方法。加上超级,问题就解决了。

你可以使用requestPermissions(PERMISSIONS, MULTIPLE_PERMISSIONS_CODE);。如果您正在使用v4,请不要使用FragmentCompat。