android蓝牙的使用
1、初始化蓝牙:
<span style="white-space:pre"> </span>// 获取手机的蓝牙管理器
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
<span style="white-space:pre"> </span>// 开启蓝牙(起到打开机器蓝牙的作用)
mBluetoothAdapter.enable();
2、对蓝牙进行监听(以下是代码动态注册广播接收者,使用对蓝牙状态的监听)
IntentFilter filter = new IntentFilter();
// 开始扫描的广播
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
// 扫描完成的广播
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
// 发现一个可用的设备的广播
filter.addAction(BluetoothDevice.ACTION_FOUND);
BluetoothReceiver mBluetoothReceiver = new BluetoothReceiver();// 这是广播接收者的子类
// 注册监听
registerReceiver(mBluetoothReceiver, filter);
3、对蓝牙的控制
// 扫描发现蓝牙设备
mBluetoothAdapter.startDiscovery();
// 停止蓝牙扫描
mBluetoothAdapter.cancelDiscovery();
4、销毁蓝牙监听:
@Override
protected void onDestroy() {
unregisterReceiver(mBluetoothReceiver);
mBluetoothReceiver = null;
super.onDestroy();
}
收下是广播接收者接收到蓝牙广播后的具体操作:
private class BluetoothReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
Toast.makeText(context, "开始扫描蓝牙设备", 0).show();
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED
.equals(action)) {
Toast.makeText(context, "扫描蓝牙设备完成", 0).show();
} else if (BluetoothDevice.ACTION_FOUND.equals(action)) {
System.out.println("发现了蓝牙设备");
// 从intent中获取BluetoothDevice对象
final BluetoothDevice device = intent
.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
System.out.println(device.getName() + "\n"
+ device.getAddress());
TextView tv = new TextView(context);
tv.setText(device.getName() + "--" + device.getAddress());
tv.setTextSize(25);
tv.setTag(device);
tv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 连接蓝牙设备
try {
mSocket = device.createRfcommSocketToServiceRecord(UUID
.fromString("00001101-0000-1000-8000-00805f9b34fb"));
// 连接指令
mSocket.connect();// 注意这条加上代码,否则蓝牙无法建立连接
mOs = mSocket.getOutputStream();
try {
System.out.println("发送指令完毕");
mOs.write(0xA1);// 帧头
mOs.write(0xFD);// 帧头
mOs.write(0x01);// 端口
mOs.write(0x00);// 状态
mOs.write(0xDF);// 帧尾
mOs.flush();
System.out.println("发送指令完毕");
} catch (IOException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
ll_container.addView(tv);// 这里一般是把textView用listView显示出来
}
}
}