You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

参考指定GitHub代码开发Android蓝牙控树莓派LED时遇运行时错误及崩溃

蓝牙控制树莓派LED应用崩溃排查方案

1. 权限问题排查

  • 确保AndroidManifest.xml中声明了全版本适配的蓝牙权限:
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!-- Android 12+ 额外权限 -->
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
    <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
    
  • Android 6.0+必须动态申请位置、蓝牙连接/扫描权限,仅静态声明权限会直接触发权限异常导致崩溃。

2. 蓝牙IO线程问题

  • 禁止在UI线程执行蓝牙连接、读写操作:将蓝牙相关逻辑放到子线程、AsyncTask或协程中执行,Android主线程不允许耗时IO操作。
  • 检查BluetoothSocket创建与连接逻辑:确保调用createRfcommSocketToServiceRecord(UUID)时使用的UUID和树莓派端完全一致,常用串口UUID为00001101-0000-1000-8000-00805F9B34FB。

3. 空指针与异常捕获

  • 在蓝牙设备获取、Socket连接、数据收发的代码块中添加try-catch,捕获IOException、NullPointerException等常见异常,避免未捕获异常直接导致应用崩溃。
  • 查看Logcat的FATAL EXCEPTION日志,定位崩溃的具体类和方法,精准排查问题根源(比如未配对设备导致的设备对象为空、Socket连接超时)。

4. 树莓派端适配检查

  • 确认树莓派蓝牙串口服务已开启:执行sudo systemctl enable bluetooth和sudo rfcomm bind hci0 0命令完成配置。
  • 检查树莓派端监听脚本的权限,确保/dev/rfcomm0具备读写权限,可通过sudo chmod 666 /dev/rfcomm0临时授权。

5. 资源泄漏修复

  • Activity销毁时,必须关闭蓝牙Socket、输入输出流,避免资源泄漏引发后续崩溃:
    if (outputStream != null) {
        try {
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    if (socket != null && socket.isConnected()) {
        try {
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    

内容的提问来源于stack exchange,提问作者lemonJuice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 22:12:15