首页 > 其他分享 >Android 蓝牙相关

Android 蓝牙相关

时间:2023-12-26 20:37:37浏览次数:20  
标签:deviceName 12 bluetoothAdapter 蓝牙 xx deviceHardwareAddress 相关 Android 11287

Android 蓝牙相关

本文主要讲述android 蓝牙的简单使用.

1: 是否支持蓝牙

/**
 * 是否支持蓝牙
 *
 * @return
 */
private boolean isSupportBluetooth() {
    BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    return bluetoothAdapter != null;
}

2: 开启蓝牙

注意这里需要申请下BLUETOOTH 权限.

/**
 * 开启蓝牙
 */
private void openBluetooth() {
    BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    //RequiresPermission(Manifest.permission.BLUETOOTH)
    if (!bluetoothAdapter.isEnabled()) {
        Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableBtIntent, 1001);
    }
}

点击跳转后的界面如下:

image-20231212140725596

3: 关闭蓝牙

private void closeBluetooth(){
    BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if (bluetoothAdapter.isEnabled()) {
        bluetoothAdapter.disable();
    }
}

关闭蓝牙同样会有弹框提示,如下:

image-20231212141441356

4: 扫描蓝牙设备

这里其实分为两部分 发现设备以及查找已配对设备.

首先,我们先讲下发现设备,这里需要调用bluetoothAdapter.startDiscovery(). 该进程是异步的,并返回一个布尔值,指示发现是否已成功启动。发现过程通常涉及大约 12 秒的查询扫描,随后会对发现的每台设备进行页面扫描,以检索其蓝牙名称。

其次我们需要注册相关的broadcast ,来接收扫描的结果.

具体的代码如下:

private final BroadcastReceiver receiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            // Discovery has found a device. Get the BluetoothDevice
            // object and its info from the Intent.
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            String deviceName = device.getName();
            String deviceHardwareAddress = device.getAddress(); // MAC address
            Log.d(TAG, "onReceive: deviceName:"+deviceName+"; deviceHardwareAddress:"+deviceHardwareAddress);
        }
    }
};
private void registerBluetoothCast(){
    // Register for broadcasts when a device is discovered.
    //Requires {@link android.Manifest.permission#BLUETOOTH} and
    //{@link android.Manifest.permission#ACCESS_COARSE_LOCATION
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    registerReceiver(receiver, filter);
}

需要注意的是权限上需要注册:

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
//发现设备
Log.d(TAG, "onClick: startDiscovery");
bluetoothAdapter.startDiscovery();

执行后具体的输出如下:

2023-12-12 14:34:33.706 11287-11287/com.test.bluetooth D/bluetoothAdapter: onClick: startDiscovery
2023-12-12 14:34:33.706 11287-11287/com.test.bluetooth D/BluetoothAdapter: startDiscovery(): called by: com.test.bluetooth
2023-12-12 14:34:33.707 11287-11287/com.test.bluetooth D/BluetoothAdapter: 210428169: getState(). Returning ON
2023-12-12 14:34:33.779 11287-11287/com.test.bluetooth D/bluetoothAdapter: onReceive: deviceName:vivo TWS 2; deviceHardwareAddress:CC:xx:xx:xx:xx:92
2023-12-12 14:34:33.780 11287-11287/com.test.bluetooth D/bluetoothAdapter: onReceive: deviceName:null; deviceHardwareAddress:3F:xx:xx:xx:xx:90
2023-12-12 14:34:34.052 11287-11287/com.test.bluetooth D/bluetoothAdapter: onReceive: deviceName:OPPO A95 5G; deviceHardwareAddress:30:xx:xx:xx:xx:9C
2023-12-12 14:34:34.351 11287-11287/com.test.bluetooth D/bluetoothAdapter: onReceive: deviceName: iMac; deviceHardwareAddress:88:xx:xx:xx:xx:BF
2023-12-12 14:34:34.366 11287-11287/com.test.bluetooth D/bluetoothAdapter: onReceive: deviceName:MacBook Pro; deviceHardwareAddress:74:xx:xx:xx:xx:49

获取已配对设备:

    private void getBindDevices(){
        Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
        if (pairedDevices.size() > 0) {
            // There are paired devices. Get the name and address of each paired device.
            for (BluetoothDevice device : pairedDevices) {
                String deviceName = device.getName();
                String deviceHardwareAddress = device.getAddress(); // MAC address
                Log.d(TAG, "bind: deviceName:"+deviceName+"; deviceHardwareAddress:"+deviceHardwareAddress);
            }
        }else{
            Log.d(TAG, "bind devices 0");
        }
    }

2023-12-12 14:47:21.792 12229-12229/com.test.bluetooth D/BluetoothAdapter: 258056678: getState(). Returning ON
2023-12-12 14:47:21.793 12229-12229/com.test.bluetooth D/bluetoothAdapter: bind: deviceName:夏沫; deviceHardwareAddress:50:xx:xx:xx:xx:5A

标签:deviceName,12,bluetoothAdapter,蓝牙,xx,deviceHardwareAddress,相关,Android,11287
From: https://www.cnblogs.com/zhjing/p/17929290.html

相关文章

  • Android 获取进程名称
    Android获取进程名称本篇文章主要获取下当前应用的进程名称,具体代码如下:publicstaticStringgetProcessNameDevice(finalContextcontext){intmyPid=Process.myPid();if(context==null||myPid<=0){return"";}ActivityManager.......
  • Android 依据Build相关信息判断机型
    Android依据Build相关信息判断机型本文主要通过Build的相关信息获取机型,目前机型判断的较少,后续继续维护更新publicstaticStringparseBuild(){StringBuildersb=newStringBuilder();StringderiveFingerprint=Build.FINGERPRINT;Stringmanufacturer......
  • Android BluetoothAdapter 使用(二)
    AndroidBluetoothAdapter使用(二)本篇文章主要讲下蓝牙设备的配对.1:蓝牙设备列表展示下面是蓝牙设备adapter的代码:packagecom.test.bluetooth;importandroid.bluetooth.BluetoothDevice;importandroid.content.Context;importandroid.view.LayoutInflater;impo......
  • Android Notification 以及 通知铃音使用
    AndroidNotification以及通知铃音使用上一篇文章讲了手机震动的使用.本篇继续讲解铃音的使用,并且在讲下通知消息的使用.1:通知消息的使用代码如下:publicstaticvoidnotice(Contextcontext){try{NotificationCompat.Builderbuilder=ne......
  • Android Vibrator 手机震动
    AndroidVibrator手机震动本篇文章主要讲下手机震动.1:检测是否支持震动/***@paramcontext*@return*是否支持手机震动*/publicstaticbooleanhasVibrator(Contextcontext){ObjectsystemService=context.getSystemService(Context.VIBRATOR_SERVICE);......
  • android-studio-2021.1.1.11-windows 版本遇到的各种大坑
    1、使用2023.12月的最新版本会无法选择java语言开发,所以必须选择较老的版本,比如我选择的android-studiobumbblebee 2021.1.1.11这个版本就可以选择java语言。2、不光需要设置代码自动补全提示,更重要的是最新的SDK,androidapi34有bug,无法语法提示,也可能是不支持我所使用的语......
  • 软件测试面试——项目相关的几个问题
    ......
  • Python中全局解释器GIL的相关问题
    1、全局解释器锁(GIL)的影响Python中可以实现多线程,但是受到全局解释器锁(GIL)的限制,因此在某些情况下,多线程并不能实现真正的并行执行。这是因为在CPython中,由于GIL的存在,同一时刻只能有一个线程执行Python字节码(解释器层面的限制)。本质上来说,GIL只会影响解释器层面运行python......
  • python .gitignore 文件模板 & 相关注意事项
    参考:https://blog.csdn.net/qq_38122800/article/details/132663030https://blog.csdn.net/weixin_42289273/article/details/122912938https://zhuanlan.zhihu.com/p/22494724在使用git进行代码版本管理时,对于不想提交的部分内容,可以通过.gitignore文件来配置提交时......
  • Linux相关扫盲1
    1、Linux操作系统发行版有哪些?Ubuntu: 一个以桌面应用为重点的发行版,也有服务器版本。Fedora: 由全球志愿者社区支持的发行版,注重在新技术的采用上。Debian: 以稳定性和开放性著称,是许多其他发行版的基础。CentOS: 以稳定性和长期支持为目标,被广泛用于服务器环境。ArchLinux......