java - 在 MapFragment 中调用 onRequestPermissionResult 时出现 Android Studio @androidx.annotation.NonNull 错误

标签 java android android-studio android-permissions mapfragment

您好,我对此还很陌生,所以请帮助我理解为什么会出现此错误。我尝试了很多解决方案,所以我只列出我所做的一切,因为我似乎无法理解为什么会这样。

我创建了一个集成 GoogleMaps 最低 SDK 21 的项目,以在 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);
} 

在我的其他 Fragment (android.support.v4.app) 类中,@androidx.annotation.NonNull 改为 @NonNull。我首先想到也许我需要将 implementation 'com.android.support:support-annotations:28.0.0' 添加到 build.gradle,但事实并非如此。然后,我尝试将 @androidx.annotation.NonNull 替换为 @NonNull,这使错误消失了,但每当我单击允许或拒绝时,它都没有点击 onRequestPermissionResult 方法。

我创建了一个检查权限的方法,但它不允许我在不检查构建是否大于或等于 SDK 23 的情况下单独使用 requestPermission,但我的最小 SDK 是 21。所以我只是检查如果构建大于或等于 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;
}

此时我不知道还能尝试什么。我想当我将 @androidx.annotation.NonNull 更改为 @NonNull 以便能够使用它时,我可能没有在 onRequestPermissionResult 中正确检查权限,但是当我对其使用 break 时该方法没有命中。

请留下详细的回复,这样我才能完全理解我的问题。我已经坚持了一天。

编辑:解决方案

 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;
}

并且刚刚将@androidx.annotation.NonNull 更改为@NonNull,现在它点击了方法。

感谢 Eugene 清理 SDK 权限。只有 SDK 23 及更高版本需要许可。

最佳答案

导入注解类:

import androidx.annotation.NonNull;

要么来自这个依赖:

implementation "androidx.annotation:annotation:1.0.0"

或者来自这个依赖项,以防还没有使用 androidx:

implementation "com.android.support:support-annotations:28.0.0"

然后你就可以像往常一样使用它了:

 @NonNull

关于java - 在 MapFragment 中调用 onRequestPermissionResult 时出现 Android Studio @androidx.annotation.NonNull 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54584768/

相关文章:

android - Google 身份一键式登录异常 : Caller has been temporarily blacklisted due to too many canceled sign-in prompts

android - 使用底部导航和导航组件在选项卡之间传递数据

android - 为什么自定义微调器在选择 Android 中的项目后不隐藏它的下拉菜单?

javascript - 从 Firebase Android 加载食物描述时字符串 null

java - ReSTLet 的 GET POST DELETE 方法路由到同一函数

java - Spring @RequestMapping Controller 转发

android-studio - 使用 Android Studio 进行 Oculus 开发的最佳示例应用程序?

android-studio - 快捷键 Ctrl + B 在组件树中不起作用,无法在 Android Studio Windows 中转到 XML

Java 按制造商、型号和年份升序查找最旧的汽车型号?

java - 采访谜题: How to find all "bad" worker histories?