Pan*_*dda 2 java android android-permissions mapfragment android-studio
您好,我对此还很陌生,所以请帮助我理解为什么会出现此错误。我已经尝试了很多解决方案,所以我只想列出我所做的一切,因为我似乎无法理解为什么会发生这种情况。
我创建了一个项目,该项目在最低 SDK 21 上集成了 GoogleMaps,以在 SDK 28 上进行目标/编译。我确实在宣言中调用了所需的权限。
我创建了一个扩展 MapFragment 类的文件,一切似乎都工作正常。我能够检查并请求用户位置的权限(该框确实显示),但是当我调用 onRequestPermissionResult 方法时,它显示不同,并给我一个错误,提示“错误:找不到符号类 NonNull ”:
@Override
public void onRequestPermissionsResult(int requestCode, @androidx.annotation.NonNull String[] permissions, @androidx.annotation.NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
Run Code Online (Sandbox Code Playgroud)
在我的其他片段(android.support.v4.app)类中,@androidx.annotation.NonNull 是@NonNull。我首先想到也许我需要将实现“com.android.support:support-annotations:28.0.0”添加到 build.gradle,但事实并非如此。然后,我尝试将 @androidx.annotation.NonNull 替换为 @NonNull,这使得错误消失,但每当我单击允许或拒绝时,它都不会命中 onRequestPermissionResult 方法。
我创建了一个检查权限的方法,但它不允许我在不检查构建是否大于或等于 SDK 23 的情况下单独使用 requestPermission,但我的最小 SDK 是 21。因此,我只是检查构建是否大于或等于 SDK 23。大于或等于 21 并使用 ActivityCompat 获取 requestPermission 方法并且它有效。它会检查并请求许可,所以我想也许 onRequestPermissionResult 只能在 MainActivity 中工作,这是我不想要的。我希望能够在检查 MapFragment 内是否授予请求后调用方法。是因为 android.support.v4.app 不支持 MapFragment 吗?它看起来像这样:
private boolean checkAskPermission(int requestCode, String permissionString){
if(Build.VERSION.SDK_INT >= 21){
int permission = ContextCompat.checkSelfPermission(mContext, permissionString);
if(permission!=PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(getActivity(), new String[]{permissionString}, requestCode);
return false;
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
此时我不知道还能尝试什么。我想当我将 @androidx.annotation.NonNull 更改为 @NonNull 以便能够使用它时,我可能没有正确检查 onRequestPermissionResult 内的权限,但是当我对其使用中断时,该方法不会命中。
请留下详细的回复,以便我能够充分理解我的问题。我已经被这个问题困扰一天了。
编辑:解决方案
private boolean checkAskPermission(int requestCode, String permissionString){
if(Build.VERSION.SDK_INT >= 23){
int permission = ContextCompat.checkSelfPermission(mContext, permissionString);
if(permission!=PackageManager.PERMISSION_GRANTED){
requestPermissions(new String[]{permissionString}, requestCode);
return false;
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
刚刚将 @androidx.annotation.NonNull 更改为 @NonNull ,现在它命中了该方法。
感谢 Eugene 清理了 SDK 权限。仅 SDK 23 及更高版本需要权限。
导入该注释类:
import androidx.annotation.NonNull;
Run Code Online (Sandbox Code Playgroud)
它要么来自此依赖项:
implementation "androidx.annotation:annotation:1.0.0"
Run Code Online (Sandbox Code Playgroud)
或来自此依赖项,如果尚未使用androidx:
implementation "com.android.support:support-annotations:28.0.0"
Run Code Online (Sandbox Code Playgroud)
然后你就可以像往常一样使用它:
@NonNull
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18831 次 |
| 最近记录: |