Android Studio中Java蓝牙控制APP无响应及崩溃问题求助
蓝牙控制APP问题修复
核心问题定位
代码存在几个关键错误,导致按钮无响应和崩溃:
- 权限检查逻辑错误:
hasPermissions方法循环中第一个权限检查后直接返回false,永远无法正确判断所有权限是否授权。 - Log对象空指针:声明了
Log log = null;,调用log.d()会触发空指针异常,导致权限请求代码执行失败,按钮监听逻辑可能未正常初始化。 - Manifest权限书写错误:
BLUETOOTH_BLUETOOTH_SCAN是重复错误的权限名,应为BLUETOOTH_SCAN。 - 关闭蓝牙未做权限校验:Android 12+关闭蓝牙需要
BLUETOOTH_CONNECT权限,直接调用disable()会因权限不足崩溃。
代码修复方案
1. 修复权限检查方法
修改hasPermissions,确保遍历所有权限后再返回结果:
private boolean hasPermissions(String[] permissions) { if (permissions != null) { for (String permission : permissions) { if (ActivityCompat.checkSelfPermission(MainActivity.this, permission) != PackageManager.PERMISSION_GRANTED) { Log.d("PERMISSIONS", "Permission is not granted: " + permission); return false; // 有一个权限未授权就返回false } } return true; // 所有权限都授权才返回true } return true; }
2. 移除错误的Log实例化
删除Log log = null;,所有日志直接用Log静态方法,修改askPermissions:
private void askPermissions(ActivityResultLauncher<String[]> multiplePermissionLauncher){ if (!hasPermissions(PERMISSIONS)) { Log.d("PERMISSIONS", "Launching multiple contract permission launcher for ALL required permissions"); multiplePermissionLauncher.launch(PERMISSIONS); } else { Log.d("PERMISSIONS", "All permissions are already granted"); } }
3. 修正Manifest权限
把错误的权限名改成正确的:
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" /> <!-- 移除错误的BLUETOOTH_BLUETOOTH_SCAN权限 -->
4. 修复关闭蓝牙的权限校验
在关闭蓝牙前增加权限检查,避免崩溃:
@SuppressLint("MissingPermission") private void bluetoothOFFMethod() { OFF.setOnClickListener(v -> { // 先检查BLUETOOTH_CONNECT权限 if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) { Toast.makeText(getApplicationContext(), "需要蓝牙连接权限才能关闭蓝牙", Toast.LENGTH_LONG).show(); multiplePermissionLauncher.launch(new String[]{Manifest.permission.BLUETOOTH_CONNECT}); return; } if (myBluetoothAdapter != null && myBluetoothAdapter.isEnabled()) { myBluetoothAdapter.disable(); Toast.makeText(getApplicationContext(), "蓝牙已关闭", Toast.LENGTH_LONG).show(); } }); }
新手调试技巧
- 过滤Logcat日志:在Android Studio的Logcat面板选择你的APP包名(
com.project.btseat),只查看自身APP日志,崩溃时会在这里看到异常堆栈信息。 - 设置断点调试:在
onCreate、askPermissions、按钮点击方法的代码行号左侧点击设置断点,启动调试模式后,执行操作会停在断点处,逐行查看变量值和执行流程。 - 手动检查权限:在系统设置
Settings -> Apps -> 你的APP -> Permissions中查看权限是否被授予,排除权限未授权的问题。
内容的提问来源于stack exchange,提问作者SemirAdam
相关产品推荐
相关产品推荐

