获取UUIDS时,Android 6.0请求与远程设备配对

时间:2015-11-11 23:29:52

标签: android bluetooth

我试图从这样的远程蓝牙设备中取出UUIDS:

        device.fetchUuidsWithSdp();

这将在所有设备上静默工作,无需用户交互,除了那些使用Android 6.0的设备明显要求配对对话框连接远程设备以获取UUID。这是预期的行为吗?这记录在哪里?有没有办法触发UUID发现而不必明确地从另一端允许它?

2 个答案:

答案 0 :(得分:3)

我通过使用隐藏的sdpSearch方法而不是fetchUuidsWithSdp找到了解决方法。这需要一点反思。这对我在Android 6.0和5.1.1上工作,没有设备试图配对。 希望这会有所帮助,并随时改进相当差的异常处理。

_set_invalid_parameter_handler

编辑: sdpSearch是在android 6.0中添加的,因此它不适用于早期版本

答案 1 :(得分:2)

<强>更新

Google's official response to your question

  

您好,   我们知道您对特定用法有疑问,可以在stackoverflow中查找。

https://stackoverflow.com/questions/14812326/android-bluetooth-get-uuids-of-discovered-devices

由于

在Android 6.0中,权限发生了变化。引入运行时权限,而不是在安装应用程序时全局接受所有应用程序所需的权限。

简而言之,权限类型大致分为正常或危险两种类型。任何侵犯用户隐私的许可都被视为危险。

权限也被放入具有类似权限的组中,例如访问精确位置和粗略位置。

在使用应用程序接受被视为危险的特定群组的许可时,用户可以选择。一旦为该应用程序运行授予特定组的权限,就不会再次询问同一组内的权限,但会根据需要向其他组请求权限。

请参阅以下详细信息:

Runtime permisssions

  

此版本引入了一种新的权限模型,用户现在可以在运行时直接管理应用程序权限。此模型为用户提供了更好的可见性和对权限的控制,同时简化了应用程序开发人员的安装和自动更新过程。用户可以单独为已安装的应用授予或撤消权限。

     

在针对Android 6.0(API级别23)或更高版本的应用中,请确保在运行时检查并请求权限。要确定您的应用是否已被授予权限,请调用新的checkSelfPermission()方法。要请求权限,请调用新的requestPermissions()方法。即使您的应用未定位到Android 6.0(API级别23),您也应该在新的权限模型下测试您的应用。

... /

  

Beginning with Android 6.0 (API level 23),用户在运行时授予和撤消应用权限,而不是在安装应用时这样做。因此,您必须在更广泛的条件下测试您的应用。在Android 6.0之前,您可以合理地假设,如果您的应用程序正在运行,它具有它在应用程序清单中声明的​​所有权限。在新的权限模型下,您无法再做出这种假设。

权限归类为normal or dangerous

蓝牙访问被视为正常许可,而配对或阅读应用程序的详细信息则被视为危险。

  

危险权限涵盖应用程序需要涉及用户私人信息的数据或资源的区域,或者可能潜在地影响用户的存储数据或其他应用程序的操作。例如,阅读用户联系人的能力是一种危险的许可。如果应用声明它需要危险权限,则用户必须明确授予该应用的权限。

因此,当从设备请求信息时:

  

如果应用请求其清单中列出的危险权限,并且该应用当前在权限组中没有任何权限,系统会向用户显示一个对话框,描述该应用想要访问的权限组。该对话框不描述该组中的特定权限。例如,如果某个应用请求READ_CONTACTS权限,系统对话框只会说该应用需要访问该设备的联系人。如果用户授予批准,系统将为应用程序提供其请求的权限。

有关实施的详情,请参阅Working With System Permissions

修改 回复您的评论

enter image description here

multiple issues bluetooth bugs和android 6.0的发布。与5.0一样,预计这些将在下一个补丁中修复。但是,我不认为你的问题是一个错误。

在看到your post here on google之后,我的回答直接回答了你所认为的错误。

您的屏幕截图:

enter image description here

来自your code here on github:

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "me.bluetoothuuidsample"
        minSdkVersion 18
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }

棉花糖设备的运行状态与运行时权限完全相同,但我相信谷歌会为您确认这一点。

为了防止在此阶段处理转换,请使用目标sdk小于23。

targetSdkVersion 22

这个Cheesefactory博客详细介绍。 Everything every Android Developer must know about new Android's Runtime Permission

编辑2

获取UUID需要位置权限,此处有帖子详细说明:https://stackoverflow.com/a/33045489/3956566