蓝牙技术
是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换,我们主要掌握这几项技能:
权限
<!-- 用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH"/>
bluetoothManager=(BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
adapter= bluetoothManager.getAdapter()
打开
Intent intent = new Intent();
intent.setAction(BluetoothAdapter.ACTION_REQUEST_ENABLE);
intent.getSerializableExtra(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,120);
startActivityForResult(intent,100);
关闭
adapter.disable();
搜索附近蓝牙设备
要用广播
//广播
class MyRecevier extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(BluetoothDevice.ACTION_FOUND)){
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
scanlist.add(device);
scanadpater.notifyDataSetChanged();
}
}
}
//绑定广播
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
myRecevier= new MyRecevier();
registerReceiver(myRecevier,intentFilter);
adapter.startDiscovery();
```
# 显示已经配对的设备
```@
bondelist.clear();
Set<BluetoothDevice> bondedDevices = adapter.getBondedDevices();
for (BluetoothDevice bondedDevice : bondedDevices) {
bondelist.add(bondedDevice);
}
bondeadpater.notifyDataSetChanged();
```
# 连接加传递数据
服务端 接受消息
```@
public class BlueToothReceiveThread extends Thread{
private BluetoothSocket serverSocket;
private Handler handler;
public BlueToothReceiveThread(BluetoothSocket serverSocket, Handler handler) {
this.serverSocket = serverSocket;
this.handler = handler;
}
@Override
public void run() {
super.run();
try {
InputStream inputStream = serverSocket.getInputStream();
byte[] bytes = new byte[1024];
int read = inputStream.read(bytes);
String s = new String(bytes, 0, read);
Message message = Message.obtain();
message.what=102;
message.obj=s;
handler.sendMessage(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
客户端 (本机) 发送消息
```@
public class BlueToothSendThread extends Thread{
private static final String TAG = "BlueToothSendThread";
private BluetoothSocket socket;
private String message;
public BlueToothSendThread(BluetoothSocket socket, String message) {
this.socket = socket;
this.message = message;
}
@Override
public void run() {
super.run();
try {
socket.connect();
if(socket.isConnected()){
OutputStream outputStream = socket.getOutputStream();
outputStream.write(message.getBytes());
Log.i(TAG, "run: "+"发送成功");
}else {
Log.i(TAG, "run: "+"连接失败");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
```