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

Android蓝牙APP中ListView在手机端不显示问题求助

ListView无法显示的排查方案

一、布局层面问题

  • 未约束的LinearLayout:包裹ListView的外层LinearLayout未添加ConstraintLayout约束,导致布局位置异常甚至被遮挡。需为该LinearLayout添加约束,比如与顶部LinearLayout底部对齐,同时约束上下左右边界:
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:orientation="vertical"
        app:layout_constraintTop_toBottomOf="@id/topLinearLayout"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent">
    
  • 过大的marginStart:ListView设置了android:layout_marginStart="150dp",在多数手机屏幕下会直接将列表推至可视区域外,建议移除或调小该值。
  • ListView高度设置不合理:android:layout_height="wrap_content"在嵌套布局中易导致高度计算异常,改为match_parent配合外层LinearLayout的约束,才能确保列表占满可用空间。

二、代码逻辑问题

  • ListView未初始化:检查MainActivity的onCreate()方法中是否存在devicelist = findViewById(R.id.listView);,若未初始化,调用setAdapter()时会无任何效果。
  • 空设备名称处理:若HC-05未设置设备名称,bt.getName()会返回null,直接添加到列表会显示空条目,建议改为同时显示名称和地址:
    list.add(bt.getName() != null ? bt.getName() + "\n" + bt.getAddress() : bt.getAddress());
    
  • 权限请求后未刷新列表:用户同意蓝牙权限后,需在权限回调中重新调用pairedDevicesList(),否则权限通过后不会自动加载设备列表:
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == REQUEST_BLUETOOTH_PERMISSION) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                pairedDevicesList();
            }
        }
    }
    
  • 地址截取逻辑隐患:若设备名称长度不足17位,info.substring(info.length()-17)会抛出字符串越界异常,导致点击列表项崩溃,建议改为直接通过BluetoothDevice获取地址,而非从名称字符串截取。

三、蓝牙权限适配问题

  • 高版本权限缺失:Android 12(API 31)及以上需申请BLUETOOTH_CONNECT权限,仅申请BLUETOOTH无法获取绑定设备列表。需更新权限请求数组:
    ActivityCompat.requestPermissions(this,
            new String[]{Manifest.permission.BLUETOOTH, Manifest.permission.BLUETOOTH_CONNECT},
            REQUEST_BLUETOOTH_PERMISSION);
    
  • Manifest权限声明:确保AndroidManifest.xml中已添加必要权限:
    <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
    <uses-feature android:name="android.hardware.bluetooth" android:required="true" />
    

四、快速验证步骤

  1. 临时修改布局,移除ListView的marginStart并添加正确约束,运行查看列表是否显示。
  2. 在pairedDevicesList()中添加日志:Log.d("Bluetooth", "Paired devices: " + pairedDevices.size());,确认是否获取到绑定设备。
  3. 检查设备蓝牙是否开启,且HC-05已与手机成功配对。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:38:19