在 Android Marshmallow 中请求多个蓝牙权限

2023-11-23

我正在开发一个具有连接功能的应用程序,该应用程序连接到使用 SDK 23 进行编译的蓝牙设备。我在请求蓝牙的多个权限时遇到问题。这是我到目前为止所做的:

@Override
public void onStart() {
    super.onStart();
    if (D)
        Log.e(TAG, "++ ON START ++");


    if (ContextCompat.checkSelfPermission(MyBlueToothClientActivity.this,
            Manifest.permission.BLUETOOTH)
            != PackageManager.PERMISSION_GRANTED) {
    } else {
        ActivityCompat.requestPermissions(MyBlueToothClientActivity.this,
                new String[]{Manifest.permission.BLUETOOTH, Manifest.permission.BLUETOOTH_ADMIN},
                REQUEST_ENABLE_BT);
    }


    if (ContextCompat.checkSelfPermission(MyBlueToothClientActivity.this,
            Manifest.permission.BLUETOOTH)
            != PackageManager.PERMISSION_GRANTED) {
    } else {

        ActivityCompat.requestPermissions(MyBlueToothClientActivity.this,
                new String[]{Manifest.permission.BLUETOOTH, Manifest.permission.BLUETOOTH_ADMIN},
                REQUEST_CONNECT_DEVICE_INSECURE);
    }
}


@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {
        case REQUEST_ENABLE_BT: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

    // permission was granted, yay! 
                Intent enableIntent = new Intent(
                        BluetoothAdapter.ACTION_REQUEST_ENABLE);
                startActivityForResult(enableIntent, REQUEST_ENABLE_BT);


            } else {

                // permission denied, boo! Disable the
                // functionality that depends on this permission.
                if (CommonData.mChatService == null)
                    setupChat();

                Toast.makeText(MyBlueToothClientActivity.this, "Permission denied for bluetooth", Toast.LENGTH_SHORT).show();
            }
            return;
        }

        case REQUEST_CONNECT_DEVICE_INSECURE: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                // permission was granted, yay!
                Intent enableIntent = new Intent(
                        BluetoothAdapter.ACTION_REQUEST_ENABLE);
                startActivityForResult(enableIntent, REQUEST_CONNECT_DEVICE_INSECURE);


            } else {

                // permission denied, boo! Disable the
                // functionality that depends on this permission.
                if (CommonData.mChatService == null)
                    setupChat();

                Toast.makeText(MyBlueToothClientActivity.this, "Permission denied for bluetooth", Toast.LENGTH_SHORT).show();
            }
            return;
        }

        // other 'case' lines to check for other
        // permissions this app might request
    }
}

虽然我能够获得请求启用蓝牙的对话框,但我没有获得第二个权限,即连接到设备。在 logcat 中,我得到:

    01-01 06:41:24.334 25473-25473 E/BluetoothChat: ++ ON START ++
    01-01 06:41:24.344 25473-25473 W/Activity: Can reqeust only one set of permissions at a time

由于我无法连接到设备,我就被困在这里了。这段代码在 Android 版本上运行良好,直到 Lollipop,只是在 Marshmallow 版本上导致问题。


BLUETOOTH and BLUETOOTH_ADMIN are 普通权限因此它们是自动授予的。仅具有以下权限危险权限表需要在运行时请求。

然而,正如文中提到的Android 6.0 的变化:访问硬件标识符:

要通过蓝牙和 Wi-Fi 扫描访问附近外部设备的硬件标识符,您的应用程序现在必须具有ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION权限:

  • WifiManager.getScanResults()
  • 蓝牙设备.ACTION_FOUND
  • 蓝牙LeScanner.startScan()

如果您使用这些方法中的任何一种,您至少需要请求ACCESS_COARSE_LOCATION在运行时(因为它is危险的许可)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Android Marshmallow 中请求多个蓝牙权限 的相关文章

  • Android 中多个蓝牙连接的自定义 UUID

    我有一个 Android 设备作为服务器连接到多个蓝牙 Android 客户端 我了解 UUID 的概念以及它的独特之处 我的问题是 我可以为连接到我的服务器的所有客户端使用相同的 UUID 吗 如果没有 我如何以编程方式为我的客户端生成
  • 我在布局上看不到任何 FirebaseRecyclerAdapter 项目

    我试图将数据从 Firebase 数据库检索到我的布局 但我看不到任何项目FirebaseRecyclerAdapter在布局中 请帮忙 我按照一个教程展示了如何做到这一点 当我运行应用程序时 我没有看到任何项目 但我可以滚动 public
  • Xamarin Android Webview Javascript

    我正在尝试通过 Xamarin for Android 创建一个移动应用程序 它有一个显示网站的 WebView 问题是正常按钮会触发 但 javascript 事件不会触发 我已经启用了 Javascript 但没有运气 如何在 Andr
  • fetchUuidsWithSdp 的奇怪 UUID 逆转

    我有一个在树莓派上运行的 python 蓝牙服务器 使用 PyBluez 我在服务器中使用的uuid是 8f86d132 4ab8 4c15 b8df 0b70cf10ea56 我正在打电话device fetchUuidsWithSdp
  • 将现有 VARCHAR 列与 Room 结合使用

    我正在尝试将现有的数据库与 Android Room 一起使用 但是 我的一个表有一个 VARCHAR 列 Room 似乎只支持 TEXT 不支持 VARCHAR 而且 sqlite 不允许修改列类型 那么 有没有办法使用Room中现有的带
  • Android WebView里面的ScrollView只滚动scrollview

    在我的应用程序中 我有一个 ScrollView 其中包含一些线性视图 一些文本视图和一个 Webview 然后是其他线性布局等 问题是 WebView 不滚动 Scroll 仅侦听 ScrollView 有什么建议么
  • 自定义首选项中的android首选项水平分隔线?

    我创建了自己的自定义首选项对象来扩展首选项 我创建它们只是因为这些自定义数据类型没有首选项 一切正常 但我的自定义首选项没有相同的外观 因为它们缺少系统首选项对象具有的水平分隔线 我已经查找了创建水平分隔线的代码 但我找不到它是在哪里完成的
  • 在 Cordova 应用程序中获取额外功能

    我们有两个 Android 应用程序 一个使用本机 Java 实现 另一个使用 Ionic 编写 Ionic 应用程序启动我的应用程序 这是使用灯插件 https github com lampaa com lampa startapp 我
  • Android 手机作为 GSM 调制解调器在 PC 上发送/接收短信?

    是否可以将 Android 移动设备用作 PC 上的 GSM 调制解调器 我正在 net下开发应用程序来发送 接收短信等 现在我想通过 USB 将我的 Android 设备连接到我的 PC 并将其用作 GSM 调制解调器来与其通信 这里是参
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • Android - AudioRecord类不读取数据,audioData和fftArray返回零

    我是 Android 新手 一直在开发音调分析器应用程序 最低 SDK 8 我读了很多关于如何实现 Audiorecord 类的文章 但我想知道为什么它在我录制时不读取任何数据 我尝试显示 audioData 和 fftArray 的值 但
  • 使用片段时应用程序崩溃

    我正在处理碎片和 我的代码中有一个我找不到的问题 logcat 指向我的一个片段中的这段代码 Override public View onCreateView LayoutInflater inflater ViewGroup conta
  • Mipmap 与可绘制文件夹[重复]

    这个问题在这里已经有答案了 我正在使用 Android Studio 1 1 Preview 1 我注意到 当我创建一个新项目时 我得到以下层次结构 不同 DPI 的 Mipmap 文件夹 不再有不同 DPI 的可绘制文件夹 我应该将所有资
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • Android 2.3 模拟器在更新位置时崩溃

    我正在使用 Eclipse 编写和调试 Android 应用程序 我需要做的事情之一是更新设备的位置 因此我尝试使用模拟器控制窗口中的位置控制面板 在 手动 选项卡上 我选择 十进制 输入有效的纬度和经度 然后单击 发送 不幸的是 接下来发
  • 您使用什么物理 Android 设备进行测试?

    有什么好的推荐用于测试目的的物理 Android 设备吗 我正在苹果阵营寻找像 iPod touch 这样的设备 可以帮助 iOS 开发人员测试他们的东西 我知道有 Nexus One 但那东西相当昂贵 而且我并不真正关心手机的东西 而是可
  • 通过电子邮件发送文本文件附件

    我正在尝试附加一个文本文件以便通过电子邮件发送 但每当我打开电子邮件应用程序时 它都会说该文件不存在 请帮助 Intent i new Intent Intent ACTION SEND i setType text plain i put
  • 在 Android 应用程序资源中使用 JSON 文件

    假设我的应用程序的原始资源文件夹中有一个包含 JSON 内容的文件 我如何将其读入应用程序 以便我可以解析 JSON See 开放原始资源 http developer android com reference android conte
  • Android 屏幕方向错误

    我使用的是 Android HTC HERO 2 1 版本 我写的活动
  • Git 实验分支还是单独的实验存储库?

    我正在开发一个 Android 应用程序 并且在整个开发周期中一直使用 Git 现在 我想构建并发布实验性功能 供人们尝试和安装 同时仍将原始的 稳定的应用程序安装在他们的设备上 现在 这意味着我需要使用不同的包名称 这会更改开发项目中的一

随机推荐

  • Shiny 的 tabsetPanel 未在多个选项卡中显示绘图

    我正在尝试使用多个tabPanel控制范围内的tabsetPanel in Shiny 假设我使用以下代码从一个选项卡开始 mainPanel tabsetPanel tabPanel Plot plotOutput distPlot 代码
  • 在 AWS ECR 上重新标记映像会创建新映像

    我在 AWS ECR 上有一个私有 Docker 存储库 我正在尝试按照此处的说明使用新标签来标记现有图像https docs aws amazon com AmazonECR latest userguide image retag ht
  • 如何在 testNG 报告中包含失败屏幕截图

    目前我正在通过这种方式截取测试失败的屏幕截图 AfterMethod alwaysRun true public void catchExceptions ITestResult result Calendar calendar Calen
  • 在 Mac OS X 上多态捕获 -fno-rtti 共享库中的异常

    我正在构建一个共享库f no rtti 在内部 这个库抛出std invalid argument并捕获std exception 但是catch从未输入子句 以下代码重现了该问题 g 4 2 Mac OS X 10 6 library c
  • 具有条件字段的骨干形式

    首先感谢各位大佬骨干形式谁制作了一个完美集成在backbone js框架中的工具 我正在使用backbone js 和backbone forms 插件 但我需要创建条件字段 假设我有以下表格 我想根据在中选择的值显示 或不显示 带有 th
  • Tabular.vim:如何对齐位于单词开头的两个不同分隔符的第一次出现?

    我已经安装了 Tabular 插件 只要不涉及复杂的正则表达式 它对我来说就非常有用 但我有这个清单 one abc rstuvw foo three defg bar four mn opq kludge hack twelve hijk
  • 如何在异步方法中启动未等待的后台任务?

    我正在努力思考如何执行某些操作very 在异步方法的世界中长时间运行的后台处理 使用来自的词汇斯蒂芬 克利里的博客 我有兴趣启动 委托任务 after await 执行 承诺任务 我想在承诺的值可用时立即返回该值 并让委托任务在后台继续进行
  • javascript 提升:首先提升什么——变量还是函数?

    最近我对 javascript 提升行为感到困惑 现在我陷入了困境 所以 有两个例子 var alpha alpha var beta beta f beta var f function f1 console log beta funct
  • MariaDB CURRENT_TIMESTAMP 默认值

    我正在尝试为用户注册设置一个数据库 并希望有一列包含注册日期 默认情况下应该是当前时间 我尝试运行这个查询 CREATE TABLE users
  • jasper报告中的书写方法?

    我正在创建一个 jasper 报告 我想编写一个方法 该方法接受整数并执行一些处理并返回一个字符串 我不知道如何在 jasper 报告中编写方法 可以写吗 任何人都可以帮助我吗这 我使用的是iReport3 6 0 示例代码
  • ActionModel 的未定义方法“on”

    我收到以下错误 NoMethodError in Users new Showing app views users form new haml where line 7 raised undefined method on for
  • 如何在不使用create_function的情况下重写示例?

    当查看 PHP 时创建函数它说 如果您使用 PHP 5 3 0 或更新版本匿名函数应该使用 我想重新创建相同的功能create function但使用anonymous function 我不知道如何做 或者我是否正确地接近它 本质上 我如
  • 如何使用 JUnit 测试 Java 中的抽象类?

    我是使用 JUnit 进行 Java 测试的新手 我必须使用 Java 并且我想使用单元测试 我的问题是 我有一个带有一些抽象方法的抽象类 但有些方法并不是抽象的 如何使用 JUnit 测试此类 示例代码 非常简单 abstract cla
  • MongoDB:跨集合查询

    假设这样的设置 blogposts title Example slug example post tags foo bar title Example2 slug example2 tags foo news headline Test
  • CSRF 失败:CSRF 令牌丢失或不正确

    我正在使用 Django 1 7 和 django rest framework 我创建了一个 API 它返回一些 JSON 数据 将其放入我的settings py REST FRAMEWORK DEFAULT PERMISSION CL
  • 结构构造函数:“在控制权返回给调用者之前,必须完全分配字段。”

    这是我正在尝试编写的结构 public struct AttackTraits public AttackTraits double probability int damage float distance Probability pro
  • Android 材料设计

    新的Android Material Design是否支持旧版本的Android 例如3 0或2 1 如果支持的话会是什么样子 作为真正的材料设计还是只是旧设计 我即将使用材料设计主题更新我的应用程序 那么有人已经这样做了吗 就材料设计这一
  • 为什么 mac chrome 上的选择框不响应点击事件? [复制]

    这个问题在这里已经有答案了 可能的重复 JQuery 函数不适用于 Mac 上的 Chrome 但适用于 Win 7 上的 Chrome 和所有其他浏览器 我有一个选择选项列表 div class social option div
  • 带标题的 window.open

    我可以控制发送的 HTTP 标头吗window open 跨浏览器 如果没有 我可以以某种方式window open然后在弹出窗口中使用自定义标头发出我的请求的页面 我需要一些狡猾的技巧 我可以控制window open 跨浏览器 发送的H
  • 在 Android Marshmallow 中请求多个蓝牙权限

    我正在开发一个具有连接功能的应用程序 该应用程序连接到使用 SDK 23 进行编译的蓝牙设备 我在请求蓝牙的多个权限时遇到问题 这是我到目前为止所做的 Override public void onStart super onStart i