我创建了一个类,用于请求名为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
的值为MainActivity
,androidManifestPermission
的值为"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);
}
});
答案 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
}
我构建了一个可供任何人使用的权限库。您可以查看源代码或通过导入库直接使用它。