Android M Permissions: onRequestPermissionsResult() 未被调用

我正在更新我们的应用程序以使用新的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);
                }
            }
        }
    }
}

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


答案 1

我遇到了同样的问题,我刚刚找到了解决方案。使用支持库时,必须使用正确的方法调用。例如:

  • AppCompatActivity 中,您应该使用 ActivityCompat.requestPermissions;
  • android.support.v4.app.Fragment 中,您应该只使用 requestPermissions(这是 android.support.v4.app.Fragment 的实例方法)

如果在片段中调用 ActivityCompat.requestPermissions,则会在活动而不是片段上调用 onRequestPermissionsResult 回调。


答案 2

你可以试试这个:

requestPermissions(permissions, PERMISSIONS_CODE);

如果从片段调用此代码,则它具有自己的 requestPermissions 方法。我认为问题在于您正在调用静态方法。

专业提示,如果你想要一个片段:onRequestPermissionsResult()FragmentCompat.requestPermissions(Fragment fragment, String[] permissions, int requestCode)


推荐