有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android M权限:未调用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);
                }
            }
        }
    }
}

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


共 (6) 个答案

  1. # 1 楼答案

    我也遇到了这个问题。如果您想要处理不在历史记录/最近记录中的权限的活动,那么您将尝试更改AndroidManifest.xml条目

    如果设置了调用requestPermissionsAppCompatActivity.requestPermissions的活动

    android:noHistory="true"
    android:excludeFromRecents="true"
    

    AndroidManifest.xml中,将不会调用onRequestPermissionsResult()。如果您的活动是从ActivityAppCompatActivity派生的,则这是正确的

    这可以通过从“AndroidManifest”中删除两个标志来修复。“xml”,并用finishAndRemoveTask()来完成活动

  2. # 2 楼答案

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

    • AppCompatActivity中时,应使用ActivityCompat。请求权限
    • 安卓系统中时。支持v4。应用程序。Fragment,您应该简单地使用requestPermissions(这是android.support.v4.app.Fragment的一个实例方法)

    如果你打电话给ActivityCompat。requestPermissions在片段中,对活动而不是片段调用onRequestPermissionsResult回调

  3. # 3 楼答案

    你可以试试这个:

    requestPermissions(permissions, PERMISSIONS_CODE);
    

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

    专业提示:如果希望片段中的onRequestPermissionsResult(),请执行以下操作: FragmentCompat.requestPermissions(Fragment fragment, String[] permissions, int requestCode)

  4. # 4 楼答案

    如果活动和片段中都有onRequestPermissionsResult,请确保在活动中调用super.onRequestPermissionsResult。片段中不需要它,但它在活动中

  5. # 5 楼答案

    我希望它能正常工作

    对于活动:

     ActivityCompat.requestPermissions(this,permissionsList,REQUEST_CODE);
    

    对于片段:

     requestPermissions(permissionsList,REQUEST_CODE);