Android 12 更新后,特定设备上出现“缺少权限 android.permission.BLUETOOTH”

2023-12-25

所以我有一个连接到蓝牙打印机的应用程序。它很好并且可以在除以下设备之外的所有设备上运行:

  • 小米红米 Note 10 Pro(已更新至 Android 12,MIUI 13.0.1)
  • Oppo Reno 5 4G(型号:CPH2159)(已更新至 android 12,带有 Color Os 13)

关于谷歌开发者 https://developer.android.com/guide/topics/connectivity/bluetooth/permissions#declare-android12-or-higher、android 12使用这三个权限

android.permission.BLUETOOTH_CONNECT
android.permission.BLUETOOTH_SCAN
android.permission.BLUETOOTH_ADVERTISE

但是当我尝试连接打印机时,我收到了这个错误,这让我抓狂。

2022-03-21 09:23:49.039 29022-29206/com.xxxx.xxxxx E/BThermalPrinterPlugin: UID 10324 / PID 29022 lacks permission android.permission.BLUETOOTH
    java.lang.SecurityException: UID 10324 / PID 29022 lacks permission android.permission.BLUETOOTH
        at android.os.Parcel.createExceptionOrNull(Parcel.java:2425)
        at android.os.Parcel.createException(Parcel.java:2409)
        at android.os.Parcel.readException(Parcel.java:2392)
        at android.os.Parcel.readException(Parcel.java:2334)
        at android.bluetooth.IBluetoothSocketManager$Stub$Proxy.connectSocket(IBluetoothSocketManager.java:227)
        at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:404)
        at id.kakzaki.blue_thermal_printer.BlueThermalPrinterPlugin.lambda$connect$1$id-kakzaki-blue_thermal_printer-BlueThermalPrinterPlugin(BlueThermalPrinterPlugin.java:544)
        at id.kakzaki.blue_thermal_printer.BlueThermalPrinterPlugin$$ExternalSyntheticLambda1.run(Unknown Source:6)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:920)

是这种 ROM/平台/设备特定的问题。 android.permission.BLUETOOTH 应该在 android 11 及更低版本上使用,因为 android 12 及更高版本将其替换为 android.permission.BLUETOOTH_CONNECT,对吗?那么为什么我首先会遇到这些特定的设备错误呢?

我已经在三星 A52 和 Android 12 上尝试过,没有任何问题。

我已在清单上添加了必要的权限

AndroidManifest.xml

    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

和运行时权限请求


        var perm = arrayListOf(
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.CAMERA,
            Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.ACCESS_COARSE_LOCATION,
            Manifest.permission.RECORD_AUDIO,
            Manifest.permission.READ_PHONE_STATE,
            Manifest.permission.BLUETOOTH,
            Manifest.permission.BLUETOOTH_ADMIN
        )
        //permission
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { //  >= android 12
                perm.add(Manifest.permission.BLUETOOTH_CONNECT)
                perm.add(Manifest.permission.BLUETOOTH_SCAN)
                perm.add(Manifest.permission.BLUETOOTH_ADVERTISE)
            }
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(
                    perm.toTypedArray(), ActivityBase.REQ_PERM
                )
            }


正如您已经发现的,小米似乎对蓝牙规范的实现不正确。

我遇到了和你一样的问题并解决了它声明android.permission.BLUETOOTH在 AndroidManifest.xml 中,即使对于 Android 12 也是如此。

因此,不要添加文档建议的以下行:

<uses-permission android:name="android.permission.BLUETOOTH"
             android:maxSdkVersion="30" />

I added:

<uses-permission android:name="android.permission.BLUETOOTH" tools:remove="android:maxSdkVersion" />

我必须添加工具:删除属性,因为我使用的蓝牙库已经添加了 maxSdkVersion 属性。因此,即使我自己没有添加它,它也会包含在我的合并清单中。

另请注意,在清单中添加此权限不会在三星等其他 Android 12 设备上导致任何进一步的问题或权限提示。

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

Android 12 更新后,特定设备上出现“缺少权限 android.permission.BLUETOOTH” 的相关文章

  • Context.startForegroundService 然后没有调用Service.startForeground

    这是我的 BroadcastReciever 类 该类处理启动电话状态 Code public class BroadCastRecieverBoot extends BroadcastReceiver Override public vo
  • 如何设计Android建筑物室内地图? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想设计一个 Android 应用程序 它可以帮助学生和其他人在特定建筑物 一层 中导航 显示前往教室的步行方向 我需要帮助 这是您通
  • Android Volley:意外响应代码 405

    我的 Android Volley JsonObjectRequest 遇到 onErrorResponse 并出现以下问题 BasicNetwork performRequest Unexpected response code 405
  • 如何将webview内容划分为多个页面

    我必须使用 Android 上的 PdfDocument 从 webView 创建 PDF https developer android com reference android graphics pdf PdfDocument htm
  • Android Studio 与 Google Play 服务的编译问题

    我正在运行 Android Studio 0 8 4 并在 Android Studio 0 8 2 上尝试过此操作 我正在运行 Java JDK 1 8 0 11 并尝试使用 JDK 1 8 0 05 每当我尝试构建我的 android
  • 定时器时间不作为变量改变?

    这是我的代码 private int V Time 1 try final Timer V Timer final Handler V Handler V Timer new Timer V Handler new Handler Loop
  • 如何以编程方式关闭画中画

    我在使用画中画模式时遇到了这个问题 当从 PIP 本身以外的其他位置再次打开 Activity 时 我想关闭 PIP 画中画 不是来自关闭按钮 我想要与 youtube 相同的场景 即当用户单击 PIP 画中画 时 它会打开相同的活动 但是
  • 移动到SD卡

    我知道从 android 2 2 开始可以使用移动到 SD 卡功能 我想知道有没有办法在我的程序中检测设备是否支持移动到 SD 卡功能 如果支持 则可以移动 否则如果不支持 则什么也不会发生 将在手机内存中 我的主要问题是我的应用程序支持
  • Android TextView 中的等宽表格数字

    我有一个自定义字体 默认情况下具有可变宽度数字字形 并且我想在 Android 中使用该字体的等宽表格数字功能TextView使数字垂直对齐 也就是说 改变如下 像这样的事情 要选择字体的表格数字功能 请使用TextView s fontF
  • 如何让 Mockito 在 androidTest 中工作

    在我的测试中 我如何模拟我编写的课程 这是我的测试代码 import android support test runner AndroidJUnit4 import org junit Before import org junit Te
  • 在异步请求中使用超时回调

    我之前问过这个问题 但我将用提出的解决方案来完成这个问题 并提出另一个问题 我正在使用这个类来进行异步网络请求 http msdn microsoft com en us library system net webrequest aspx
  • Android 导航 DeepLinks - 如何区分使用导航操作进行导航与深层链接

    我有导航操作和深层链接 根据您导航的位置 将您带到某个片段 我想确定是使用了深层链接还是仅使用了导航操作 这正是KEY DEEP LINK INTENT https developer android com reference andro
  • 地理围栏不可用以及如何处理

    我正在 Android 上使用地理围栏 它在大多数手机上都工作正常 但在其中一些上 它不起作用 在我的错误日志中显示 地理围栏不可用 某些用户没有为 Google Play 服务启用位置跟踪 我认为这就是地理围栏在他们的手机上不起作用的原因
  • Google 的 Android OpenGL 教程是否教授了错误的线性代数?

    在帮助另一位用户解决有关该问题的问题后响应触摸事件 http developer android com training graphics opengl touch htmlAndroid教程 我下载了源代码 并且对我所看到的感到非常困惑
  • 通知管理器所需的权限

    我正在尝试使用以下命令将振铃器设置为静音且请勿打扰优先级 AudioManager myAudioMgr AudioManager context getSystemService Context AUDIO SERVICE Notific
  • 突出显示菜单抽屉/滑动菜单中的所选项目

    使用的库 https github com SimonVT android menudrawer https github com SimonVT android menudrawer https github com JakeWharto
  • 使用 Android O 的“android:fontFamily”时出现错误“文件名必须以 .xml 结尾”?

    Android O 引入了一项新功能 XML 中的字体 它允许您将字体用作资源 我正在创建font资源文件中的文件夹 由安卓开发者 https developer android com preview features working w
  • 如何像UCBrowser一样使用webview打开url

    我是安卓新手 我正在尝试制作一个示例应用程序来在 webview 中打开网站 问题是 网站以桌面模式打开 如何才能像UC浏览器 手机模式 一样打开网站 尝试这个 它应该有效 webview1 getSettings setJavaScrip
  • AsyncTask的并行执行

    An 异步任务单击时执行 List
  • Android 可扩展列表视图随机播放子项

    你好 我正在使用 Android Expandable listview 并用不同的视图在其中膨胀子视图 我遇到的问题是 当我展开视图然后打开另一个父视图时 布局中的子视图会变得混乱并在代码中膨胀错误的布局 这是我的两个项目的示例代码 这是

随机推荐

  • 为什么不可能构建一个可以确定 C++ 函数是否会更改特定变量值的编译器?

    我在一本书上读到这样一句话 事实证明 构建一个可以实际执行的编译器是不可能的 确定 C 函数是否会更改 a 的值 特定变量 该段落讨论了为什么编译器在检查常量性时是保守的 为什么不可能构建这样的编译器 编译器始终可以检查变量是否被重新分配
  • 使用java从cassandra读取数据

    My sample cassandra table looks like id article read last hours name 5 4 5 6 5 shashank 10 12 88 32 1 sam 8 4 5 6 8 aman
  • 更改 Chart.js 工具提示中的日期格式

    我正在使用 Chart js 生成图表 一切正常 但是如何格式化工具提示信息呢 应该是 2020年4月28日 05 00 你需要定义time tooltipFormat https www chartjs org docs latest a
  • 如何从 NSArray 中的每个 NSDictionary 获取特定键的所有值? [复制]

    这个问题在这里已经有答案了 我有一个包含字典对象的数组 每个字典中的键都是通用的 现在我想获取该键的所有值 我已经通过迭代获得了这些值 但我正在寻找一些直接的方法或完成这项工作的默认方法 您能帮助我获得一种可以达到目的的默认方法吗 谢谢 数
  • 跨浏览器另存为.txt

    是否有一个 JavaScript 库允许将字符串保存为 txt 文件 并且可以跨浏览器工作 过去 我一直在使用 Downloadify 但出于以下几个原因 我正在考虑另一个选择 我希望找到一个纯JavaScript的解决方案 而不需要Fla
  • 获取 2 个日期之间的所有月份

    我创建了一个函数 它返回一个包含每个月的数组 从提供的碳日期开始到当前日期结束 虽然这个函数正在做它应该做的事情 但它看起来很丑陋 显然我的编程技能还没有达到应有的水平 当然必须有更好的方法来实现我想要的 我的代码如下所示 class Da
  • Python 请求,无文件的多部分

    是否可以使用 python 请求发送多部分 表单数据而不发送文件 我的请求标头应如下所示 3eeaadbfda0441b8be821bbed2962e4d Content Disposition form data name value c
  • 角度单元测试:如何在没有范围的情况下测试控制器属性

    我正在尝试为控制器编写一些测试 但是所有文档 教程 等都演示了 scope 上的函数和变量 如果你想测试不在 scope 上的东西怎么办 Ex app controller fakeCtrl function scope var foo b
  • 是否可以对 HashMap 的键和值使用单个泛型?

    In Rust 书第 13 章 https doc rust lang org book second edition ch13 01 closures html 你实现了一个Cacher使用记忆来演示函数式编程以及如何加速长时间运行的任务
  • 当 --module 为“none”时,如何使用 @types npm 存储库中的 TypeScript 定义文件

    如果编译器的模块系统参数设置为 none 如何通过 types 使用 TypeScript 定义文件 例如 当使用 Express Web 服务器的类型定义时 npm 安装 types express 使用以下 tsconfig json
  • UIView - 加载视图时如何收到通知?

    有没有类似的东西viewDidLoad of UIViewController for a UIView 我需要尽快收到通知UIView已加载 子类UIView 并执行一些操作 根据您需要执行的操作类型 有几种技术 id initWithF
  • Gmail 类似 URL 方案

    我正在开发票务系统 有以下要求 主页分为两个部分 第 1 节 此处显示了一些过滤器选项 例如封闭票证 开放票证 所有票证 分配给我的票证等 您可以选择一个或多个这些过滤器 第 2 节 此处将显示满足上述筛选条件的门票列表 现在这就是我想要的
  • Monitor.Wait 是否确保重新读取字段?

    人们普遍接受 我相信 lock将强制重新加载字段中的任何值 本质上充当内存屏障或栅栏 恐怕我在这方面的术语有点宽松 其结果是字段仅ever在 a 内访问lock自己不需要volatile 如果我已经错了 请说出来 一个很好的评论是在这里长大
  • Snow Leopard 中的 Xcode 3.2 在运行单元测试时挂起

    所以我有一些在 Xcode 3 1 Leopard 中通过的单元测试 它们在 iPhone 应用程序项目中使用 SenTestingKit 并在单独的 测试 目标中构建 运行 我刚刚在 Snow Leopard 上升级到 Xcode 3 2
  • div 的两侧可以有滚动条吗? [复制]

    这个问题在这里已经有答案了 我有一个包含很多列的表 因此我将其放在带有 Overflow auto 的 div 内 从而启用水平滚动 滚动条位于 div 的底部 我的问题是 你可以有2个滚动条 一个在div的底部 另一个在div的顶部吗 如
  • APNs 证书在登录钥匙串中看起来不同

    我正在努力生成一些替换 APNs 服务器证书 我很担心 因为当我将它们拖到钥匙串登录中时 它们看起来有所不同 之前的证书看起来像 Apple Production IOS Push Services com mycompany myprod
  • 获取相关曲目列表 HTTP API SoundCloud

    我无法在 HTTP API 文档中找到任何合适的内容 据我所知 当前曲目完成后 SC 小部件中会弹出一些曲目 因此 SC 本身有一些相关的曲目功能 但我们可以通过 API 访问它吗 即获取与给定曲目 ID 相关的曲目列表 免责声明 这是一个
  • 在 data.frames 中查找相等的列

    我有两个 data frame 对象 x 和 ans1 x 中有 500 列 ans1 有 7 列 如何找到 x 中与 ans1 中的列相同的列名称 可以使用identical 与digest包裹 library digest x lt d
  • 我发现这段代码可以获取 Windows 写入权限,但它不起作用

    我正在尝试使用 c c 在 D 驱动器上创建新文件 我发现这段代码可以获取 Windows 写入权限 但它不起作用 有人可以帮助我吗 我是 C 新手 BOOL SetPrivilege HANDLE hToken access token
  • Android 12 更新后,特定设备上出现“缺少权限 android.permission.BLUETOOTH”

    所以我有一个连接到蓝牙打印机的应用程序 它很好并且可以在除以下设备之外的所有设备上运行 小米红米 Note 10 Pro 已更新至 Android 12 MIUI 13 0 1 Oppo Reno 5 4G 型号 CPH2159 已更新至