代码之家  ›  专栏  ›  技术社区  ›  Tom Taylor

sdk 22和25之间的访问精细位置和访问粗略位置权限有什么区别吗?

  •  0
  • Tom Taylor  · 技术社区  · 5 年前

    我试图通过在androidmanifest.xml中声明当前位置,从GPS或使用这些权限的网络提供商获取当前位置,

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    

    我在运行时验证权限为,

    ActivityCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)
    

    ActivityCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED
    

    对于我来说,android sdk版本22可以很好地工作,而在sdk版本25中,尽管在androidmanifest.xml中声明了权限,但是在运行时它不会得到反映。

    我检查了这些权限是否被授予,

    adb shell dumpsys包com.abc.xyz

    当我试图使用adb shell授予在sdk-25上运行的应用程序的权限时,没有授予这些权限,

    亚洲开发银行壳牌项目经理授权com.abc.xyz android.manifest.permission.access_粗略位置

    我怀疑android是从sdk version 25授予这些权限的(如果我错了,请纠正我)。仅仅通过google,我无法了解sdk版本之间的权限级别/严重性是如何变化的。

    请帮我了解一下。

    2 回复  |  直到 5 年前
        1
  •  3
  •   abhinandan sharma    5 年前

    在所有版本的android上,你的应用程序需要在其应用程序清单中声明它所需的正常和危险权限,如声明权限中所述。但是,该声明的效果因系统版本和应用程序的目标sdk级别而异:

    如果应用程序的目标sdk为22或更低:如果在 清单,用户在安装 如果他们不授予权限,则系统根本不会安装应用程序。

    如果应用程序的目标sdk为23或更高版本:应用程序必须在清单中列出权限,并且必须在应用程序运行时请求所需的每个危险权限。用户可以授予或拒绝每个权限,并且应用程序可以在有限的 功能,即使用户拒绝权限请求。

    你可以参考这个 Link

        2
  •  1
  •   raj kavadia    5 年前

    试试这个。

     private boolean RequestPermissions() {
    
        int camera = ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.CAMERA);
        int storage = ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
        List<String> listPermissionsNeeded = new ArrayList<>();
        if (camera != PackageManager.PERMISSION_GRANTED) {
            listPermissionsNeeded.add(CAMERA);
        }
        if (storage != PackageManager.PERMISSION_GRANTED) {
            listPermissionsNeeded.add(WRITE_EXTERNAL_STORAGE);
            listPermissionsNeeded.add(READ_EXTERNAL_STORAGE);
    
        }
        if (!listPermissionsNeeded.isEmpty()) {
            ActivityCompat.requestPermissions(getActivity(), listPermissionsNeeded.toArray
                    (new String[listPermissionsNeeded.size()]), REQUEST_ID_MULTIPLE_PERMISSIONS);
            return false;
        }
    
        return true;
    }
    

    这个函数检查是否需要权限,如果权限不可用,它将询问用户。