600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > android 蓝牙耗电量 安卓Android BLE低功耗蓝牙接受数据详解 只需100行代码轻松搞定...

android 蓝牙耗电量 安卓Android BLE低功耗蓝牙接受数据详解 只需100行代码轻松搞定...

时间:2023-09-22 06:27:25

相关推荐

android 蓝牙耗电量 安卓Android BLE低功耗蓝牙接受数据详解 只需100行代码轻松搞定...

做了一个安卓手机通过蓝牙获取电子秤的重量的Demo,在此写下以供大家参考和讨论.

先上代码,着急用的可以迅速参考,后面再写说明

我跳过了扫描过程,直接根据蓝牙设备地址进行连接,可以运行官方Demo来获取蓝牙设备地址以及UUID

/** * 蓝牙接收数据Demo * 蓝牙地址和UUID可以通过BLE官方Demo来获取 */

public class MainActivity extends AppCompatActivity {

private TextView tv;

private ScrollView sv;

private BluetoothManager mBluetoothManager;

private BluetoothAdapter mBluetoothAdapter;

private BluetoothGatt mBluetoothGatt;

private String mDeviceAddress = "00:15:83:30:80:CC";//蓝牙设备地址

public final static UUID UUID_SERVICE =

UUID.fromString("0000ffe0-0000-1000-8000-00805f9b34fb");//蓝牙设备的Service的UUID

public final static UUID UUID_NOTIFY =

UUID.fromString("0000ffe1-0000-1000-8000-00805f9b34fb");//蓝牙设备的Characteristic的UUID

private Handler handler = new Handler() {

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

tv.append((String) msg.obj);

sv.fullScroll(View.FOCUS_DOWN);

}

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tv = (TextView) findViewById(R.id.tv);

sv = (ScrollView) findViewById(R.id.sv);

//获取BluetoothManager

mBluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);

//获取BluetoothAdapter

mBluetoothAdapter = mBluetoothManager.getAdapter();

//如果蓝牙没有打开 打开蓝牙

if (!mBluetoothAdapter.isEnabled()) {

mBluetoothAdapter.enable();

}

//根据蓝牙地址获取BluetoothDevice

BluetoothDevice bluetoothDevice = mBluetoothAdapter.getRemoteDevice(mDeviceAddress);

//如果Gatt在运行,将其关闭

if (mBluetoothGatt != null) {

mBluetoothGatt.close();

mBluetoothGatt = null;

}

//连接蓝牙设备并获取Gatt对象

mBluetoothGatt = bluetoothDevice.connectGatt(MainActivity.this, true, bluetoothGattCallback);

}

/** * 蓝牙返回数据函数 * 方法体在service中,不得在方法体中使用更新界面的操作以及Toast,否则程序无法运行!!! */

private BluetoothGattCallback bluetoothGattCallback = new BluetoothGattCallback() {

@Override

public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {//连接状态改变

if (status == BluetoothGatt.GATT_SUCCESS) {

if (newState == BluetoothProfile.STATE_CONNECTED) {//连接成功

setText("连接成功");

//搜索Service

mBluetoothGatt.discoverServices();

} else if (newState == BluetoothProfile.STATE_DISCONNECTED) {//断开连接

setText("连接断开");

}

}

}

@Override

public void onServicesDiscovered(BluetoothGatt gatt, int status) {//服务被发现

//根据UUID获取Service中的Characteristic,并传入Gatt中

mBluetoothGatt.setCharacteristicNotification(gatt.getService(UUID_SERVICE).getCharacteristic(UUID_NOTIFY), true);

}

@Override

public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {//数据改变

String data = new String(characteristic.getValue());

Log.e("log", data);

setText(data);

}

};

//添加文本

private void setText(String text) {

Message message = new Message();

message.obj = text;

handler.sendMessage(message);

}

//关闭Activity的时候需要关闭Gatt

@Override

protected void onDestroy() {

super.onDestroy();

mBluetoothGatt.close();

mBluetoothGatt = null;

}

}

官方Demo使用方法

主界面,上面的条目即为搜索到的蓝牙设备

如:BT05为蓝牙设备名 ,00:15:83:30:80:CC为蓝牙地址

点进去之后为蓝牙设备中的service,点开service里面有characteristic,characteristic中含有需要的数据

点击最后一个characteristic的效果

图中的标红数字即为我需要的数据

记录下service的UUID和characteristic的UUID,以供使用

代码量并不多,注释也比较详细,大家可以直接看上面代码

需要注意的是在bluetoothGattCallback方法在一个Service中,不能在方法体中进行更新界面或者Toast.

下面放源码,不过需要更改蓝牙地址和UUID才能使用,修改成自己的设备的地址和UUID.

CSDN:/download/woqq863787405/9691490

网盘:/s/1b8t5oi

最后,我只是刚入门的新手,可能有的地方不对或者不漏洞,欢迎大家指出.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。