首页 > 解决方案 > android 中的 Listview 项目应显示 ble 设备的名称,但应隐藏设备的 MAC 地址

问题描述

我一直在尝试找到一种在 android 应用程序中显示 Ble 设备的方法。我只想显示 Ble 设备的名称,但想隐藏设备的 MAC 地址。

目前我的代码获取 ble 设备列表并显示一串名称和 MAC 地址。从列表视图中选择时,包含 ble 设备名称和 MAC 的字符串被发送到另一个活动,其中 MAC 用于连接到设备

String macadd = result.getDevice().getAddress();
String bt_name = result.getDevice().getName();
// check if device is already added to list
if(!device_mac_list.contains(macadd)){
   device_mac_list.add(macadd);
//  adds name and mac to new ble device to list
   devicelist.add("Device Name:" + bt_name + "\n" + "MAC:" + macadd);
   arrayAdapter.notifyDataSetChanged();
}

ListView 声明

private ListView bt_devices;
ArrayList<String> devicelist = new ArrayList<String>();
arrayAdapter = new ArrayAdapter<String>(DevActivity.this, android.R.layout.simple_list_item_1, devicelist);
bt_devices.setAdapter(arrayAdapter);

我只想显示设备的名称并将mac地址隐藏在列表视图中。其余的过程将是相同的

谢谢你

标签: javaandroidbluetooth-lowenergy

解决方案


解决方案是将设备的名称和 MAC 地址以键值格式存储在 Map 中。

在 map 中存储键值对的代码是

HashMap<String, String> filterDevices = new HashMap<>();
if(!device_mac_list.contains(btMac)){
    device_mac_list.add(btMac);
//  storing bluetooth device name in map with device name and mac address in key value pair
    filterDevices.put(btName, btMac);
    devicelist.add("Device: "+btName);
    arrayAdapter.notifyDataSetChanged();
}

可以使用从列表视图选择中接收到的名称从地图中检索 MAC 地址

bt_devices.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        String deviceName = ((TextView)view).getText().toString();
        String deviceMac = filterDevices.get(deviceName);
        Log.d("select", deviceName+":"+deviceMac);
    }
});

推荐阅读