ActivityCompat.requestPermissions什么都不做

时间:2017-10-25 01:13:03

标签: android android-permissions

我创建了一个类,用于请求名为PermissionsService的权限:

public void getPermission(final String androidManifestPermission, final int mPermissionCode, final String rational) {
    if (ContextCompat.checkSelfPermission(mactivity, androidManifestPermission) != PackageManager.PERMISSION_GRANTED) {
        Snackbar.make(mLayout, rational, Snackbar.LENGTH_LONG).setAction("OK", new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ActivityCompat.requestPermissions(mactivity, new String[]{androidManifestPermission}, mPermissionCode);
            }
        }).show();
    } else {
        ActivityCompat.requestPermissions(mactivity, new String[]{androidManifestPermission}, mPermissionCode); <------ nothing happens when the flow reaches here
    }
}

public static enum PERMISSIONS {
    CAMERA_PERMISSION,
    GPS_PERMISSION
}

当流程到达行ActivityCompat.requestPermissions(mactivity, new String[]{androidManifestPermission}, mPermissionCode);时,根本没有任何事情发生。

mactivity的值为MainActivityandroidManifestPermission的值为"android.permission.ACCESS_FINE_LOCATION"

我不明白问题是什么。

我注意到一些可能相关的非常有趣的事情。

requestPermissions函数将活动作为第一个参数。但它执行的回调onRequestPermissionsResult在ActivityCompat接口中定义。OnRequestPermissionsResultCallback

怎么会这样?函数requestPermissions如何在onRequestPermissionsResult(第一个参数)中找到回调Activity

也许那与我的问题有关?

我尝试制作我的活动工具OnRequestPermissionsResultCallback。当我使用@Override onRequestPermissionsResult注释函数时,编译器会抱怨函数onRequestPermissionsResult(来自接口OnRequestPermissionsResultCallback)不会覆盖超类。

我主要担心的是我无法让操作系统请求用户的许可。

有谁知道问题是什么?

runOnUIThread

我尝试在UIThread上运行requestPermissions,就像这样(不起作用):

mactivity.runOnUiThread(new Runnable() {
    @Override
    public void run() {
        ActivityCompat.requestPermissions(mactivity, new String[]{androidManifestPermission}, mPermissionCode);
    }
});  

1 个答案:

答案 0 :(得分:2)

如果您已拥有权限,data %>% distinct(grpA, idB, .keep_all = TRUE) %>% group_by(grpA) %>% summarise(newCol = sum(valueC)) %>% left_join(data, ., by = 'grpA') 方法将不会显示权限对话框。

如果您还没有权限,则会显示询问权限的对话框。

显示对话框后,用户允许或拒绝该对话框。您的活动中的回调方法requestPermissions将被调用。

除非您在活动中,否则无法覆盖方法onRequestPermissionsResult

但是,您可以在助手类中创建一个方法来委派权限。

在你的助手班:

onRequestPermissionsResult

在您的活动中,覆盖该方法并将其传递给您的助手类:

public static void onRequestPermissionResult(/*params*/){
    //your code
}

我构建了一个可供任何人使用的权限库。您可以查看源代码或通过导入库直接使用它。

https://github.com/nabinbhandari/Android-Permissions