Android要求用户为清单中已请求的应用启用权限

时间:2017-04-24 10:37:19

标签: android bluetooth permissions location android-manifest

我正在开发的应用程序使用蓝牙和存储权限,因此我的AndroidManifest.xml包含以下内容。

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>
<uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE"></uses-permission>

然而,当安装该应用程序时,在扫描蓝牙设备后,在我的设备设置(设置 - &gt;应用程序 - > [我的应用程序] - &gt;权限)中手动启用“位置”权限之前,未发现任何内容。我已经读过某个地方,如果您想使用蓝牙,Android 6.0(可能是7.0)及以上版本需要此权限,但为什么在清单文件中安装时没有启用这些权限?我错过了一个吗?

3 个答案:

答案 0 :(得分:3)

来自官方documentation

  

系统权限分为两类:普通和危险:

     
      
  • 正常权限不会直接冒使用户隐私的风险。如果您的应用在其清单中列出了正常权限,系统会授予权限   自动许可。
  •   
  • 危险权限可让应用访问用户的机密数据。如果您的应用在其中列出了正常权限   清单,系统自动授予权限。如果你   列出危险许可,用户必须明确给予   批准您的应用。
  •   

  
      
  • 如果设备运行的是Android 5.1或更低版本,或者您的应用的目标SDK是22或更低:如果您列出了危险权限   清单,用户在安装时必须授予权限   应用;如果他们不授予权限,则系统不会安装   应用程序。
  •   
  • 如果设备运行的是Android 6.0或更高版本,并且您的应用的目标SDK为23或更高:应用必须列出权限   清单,它必须要求每个危险的许可   应用程序运行时需要。用户可以授予或拒绝每个   权限,应用程序可以继续运行有限   功能即使用户拒绝权限请求也是如此。
  •   

因此,您很可能会在运行API 23+的设备或模拟器上测试您的应用,并请求设备的位置。

位置权限是危险的,因此在Android 6.0或更高版本中,用户可以手动进行位置访问。为此,您必须以编程方式添加危险权限。看看 here ,以获得良好的指导。

PS 要查明哪些权限危险正常,请查看 here

答案 1 :(得分:2)

位置和蓝牙是两回事。

您不需要请求访问蓝牙的权限,因为它是正常权限,但您确实需要请求位置权限,因为它是危险权限

您可以找到必须在运行时here上请求的所有权限的列表。

答案 2 :(得分:1)

某些权限被归类为危险,需要在运行时提出。

ActivityCompat.requestPermissions(thisActivity,
            new String[]{Manifest.permission.READ_CONTACTS},
            MY_PERMISSIONS_REQUEST_READ_CONTACTS);

将READ_CONTACTS权限替换为位置权限