新闻详情

新闻详情

首页 / 资讯中心 / 详情

uniapp开发蓝牙搜索startBluetoothDevicesDiscovery:fail Location services are turned off

发布时间:2026/9/13 16:03:19来源:尧图网络
uniapp开发蓝牙搜索startBluetoothDevicesDiscovery:fail Location services are turned off
问题描述在使用uniapp开发安卓应用程序时使用uni.startBluetoothDevicesDiscovery搜索蓝牙时在部分设备上出现fail Location services are turned off报错特别是无GPS硬件支持的设备已确认开启位置信息且给了权限解决方法使用安卓原生蓝牙扫描广播接收实现借助AI具体示例代码如下template view classcontainer view classstatus状态: {{ isScanning ? 正在扫描... : 停止扫描 }}/view button typeprimary clickstartScan :disabledisScanning开始扫描/button button typewarn clickstopScan :disabled!isScanning停止扫描/button view classlist-title已发现设备:/view scroll-view scroll-ytrue classdevice-list view v-for(item, index) in deviceList :keyindex classdevice-item text classname{{ item.name || 未知设备 }}/text text classaddress{{ item.address }}/text text classrssi信号: {{ item.rssi }} dBm/text /view /scroll-view /view /template script // 在这里声明变量使其在整个组件内可用 let _BluetoothAdapter; let _BluetoothDevice; let _IntentFilter; let _mainActivity; export default { data() { return { isScanning: false, deviceList: [], receiver: null, nativeAdapter: null }; }, onLoad() { // 确保在 plus 环境下初始化 // #ifdef APP-PLUS this.initNativeClasses(); // #endif }, onUnload() { this.stopScan(); this.unregisterReceiver(); }, methods: { // 1. 导入原生类并获取适配器 initNativeClasses() { try { // 导入原生类并赋值给外部变量 _BluetoothAdapter plus.android.importClass(android.bluetooth.BluetoothAdapter); _BluetoothDevice plus.android.importClass(android.bluetooth.BluetoothDevice); _IntentFilter plus.android.importClass(android.content.IntentFilter); _mainActivity plus.android.runtimeMainActivity(); this.nativeAdapter _BluetoothAdapter.getDefaultAdapter(); if (!this.nativeAdapter) { uni.showToast({ title: 该设备不支持蓝牙, icon: none }); } } catch (e) { console.error(初始化原生类失败, e); } }, // 2. 注册广播接收器 registerReceiver() { if (this.receiver) return; const self this; // 必须使用 plus.android.implements 实现 BroadcastReceiver 接口 this.receiver plus.android.implements(io.dcloud.feature.internal.reflect.BroadcastReceiver, { onReceive: function(context, intent) { plus.android.importClass(intent); const action intent.getAction(); if (action _BluetoothDevice.ACTION_FOUND) { // 查找到设备 const device intent.getParcelableExtra(_BluetoothDevice.EXTRA_DEVICE); const rssi intent.getShortExtra(_BluetoothDevice.EXTRA_RSSI, -100); // 使用 plus.android.invoke 调用原生方法获取属性 const name plus.android.invoke(device, getName); const address plus.android.invoke(device, getAddress); const index self.deviceList.findIndex(d d.address address); if (index -1) { self.deviceList.push({ name, address, rssi }); } else { self.deviceList[index].rssi rssi; } } else if (action _BluetoothAdapter.ACTION_DISCOVERY_FINISHED) { self.isScanning false; uni.hideLoading(); } } }); const filter new _IntentFilter(); filter.addAction(_BluetoothDevice.ACTION_FOUND); filter.addAction(_BluetoothAdapter.ACTION_DISCOVERY_FINISHED); _mainActivity.registerReceiver(this.receiver, filter); }, // 3. 开始扫描 async startScan() { if (!this.nativeAdapter) return; // 权限检查 const hasPermission await this.checkPermission(); if (!hasPermission) return; this.deviceList []; this.registerReceiver(); // 如果正在扫描先停止 if (this.nativeAdapter.isDiscovering()) { this.nativeAdapter.cancelDiscovery(); } // 启动原生扫描 const success this.nativeAdapter.startDiscovery(); if (success) { this.isScanning true; uni.showLoading({ title: 原生扫描中... }); } else { uni.showToast({ title: 开启扫描失败, icon: none }); } }, // 4. 停止扫描 stopScan() { if (this.nativeAdapter this.nativeAdapter.isDiscovering()) { this.nativeAdapter.cancelDiscovery(); } this.isScanning false; uni.hideLoading(); }, unregisterReceiver() { if (this.receiver) { _mainActivity.unregisterReceiver(this.receiver); this.receiver null; } }, // Android 高版本定位权限申请 checkPermission() { return new Promise((resolve) { plus.android.requestPermissions( [android.permission.ACCESS_FINE_LOCATION], (result) { if (result.granted.length 0) resolve(true); else resolve(false); }, (err) resolve(false) ); }); } } }; /script style scoped .container { padding: 20px; } .status { color: #007AFF; margin-bottom: 10px; font-size: 14px; } .list-title { margin-top: 20px; font-weight: bold; border-bottom: 1px solid #eee; padding-bottom: 5px; } .device-list { height: 400px; } .device-item { padding: 10px 0; border-bottom: 1px solid #f9f9f9; } .name { display: block; font-size: 16px; } .address { font-size: 12px; color: #888; } .rssi { font-size: 12px; color: #007AFF; margin-left: 10px; } button { margin-top: 10px; } /style
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

SSA-LSTM车速预测:面向交通突变的动态优化方法 2026/9/13 16:00:29

SSA-LSTM车速预测:面向交通突变的动态优化方法

简介:本资源是一套面向智能交通与车辆工程领域研究者的车速预测建模方案,聚焦LSTM深度学习模型在动态交通流预测中的应用优化。针对传统LSTM超参数调优依赖经验、收敛慢、预测精度受限等问题,引入麻雀搜索算法(SSA)自动…

阅读更多 →
BOSS直聘数据分析师职位:Scrapy爬虫到机器学习薪资预测全链路实践 2026/9/13 16:00:29

BOSS直聘数据分析师职位:Scrapy爬虫到机器学习薪资预测全链路实践

简介:面向高校期末大作业与毕业设计场景的完整项目包,围绕BOSS直聘“数据分析师”岗位,覆盖爬虫采集、数据清洗与分析、可视化看板、机器学习建模预测及结果解读等全流程。代码注释详细,按爬虫、分析与可视化、机器学习划分模块&a…

阅读更多 →
knowledge-work-plugins 企业搜索插件连接器(Connectors)完全指南:`~~category` 占位符机制与 MCP 源接入 2026/9/13 16:00:29

knowledge-work-plugins 企业搜索插件连接器(Connectors)完全指南:`~~category` 占位符机制与 MCP 源接入

knowledge-work-plugins 企业搜索插件连接器(Connectors)完全指南:~~category 占位符机制与 MCP 源接入 【免费下载链接】knowledge-work-plugins Open source repository of plugins primarily intended for knowledge workers to use in Cl…

阅读更多 →
POCS与TVM交替迭代:图像超分辨率重建的原理与工程实现 2026/9/13 16:00:29

POCS与TVM交替迭代:图像超分辨率重建的原理与工程实现

简介:POCS-TVM(投影到凸集-全局变分最小化)算法的MATLAB实现资源,面向医学成像、CT及图像重建方向的研究者与学生,旨在解决稀疏角度或噪声条件下的图像重建问题。压缩包内共5个文件,以4个.m脚本为核心&…

阅读更多 →
Gas Town Scheduler 架构:配置驱动的 polecat 容量调度与延迟派发机制 2026/9/13 16:00:29

Gas Town Scheduler 架构:配置驱动的 polecat 容量调度与延迟派发机制

Gas Town Scheduler 架构:配置驱动的 polecat 容量调度与延迟派发机制 【免费下载链接】gastown Gas Town - multi-agent workspace manager 项目地址: https://gitcode.com/GitHub_Trending/ga/gastown 导读 Gas Town 是一个多智能体工作区管理器&#xff…

阅读更多 →
SSM校园门户网站部署与故障排查实战指南 2026/9/13 15:57:29

SSM校园门户网站部署与故障排查实战指南

简介:这是一套基于SSM(SpringSpringMVCMyBatis)框架开发的校园门户网站完整Web应用源码,面向Java Web初学者与课程设计实践者,解决高校信息化场景下前台资讯展示与后台统一管理的典型开发需求。资源为ZIP压缩包&#x…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞