Android 레거시 블루투스 통신
서비스 측의 주요 임무는 연결을 기다리고 클라이언트가 주동적으로 연결을 시작하는 것이다
다음은 서비스 측의 과정을 말씀드리겠습니다.
블루투스 통신의 uid는 고정되어 있습니다
private static final UUID MY_UUID =
UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
register();//
//
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter != null) {//
if (!mBluetoothAdapter.enable()) {
mBluetoothAdapter.enable();//
} else {
mBluetoothAdapter.startDiscovery();//
}
}
private void register() {
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);//
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);//
filter.addAction(BluetoothDevice.ACTION_FOUND);//
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);//
filter.addAction("android.bluetooth.device.action.PAIRING_REQUEST");//
registerReceiver(mBroadcastReceiver, filter);
}
다음은 라디오 수신류의 조작을 보도록 하겠습니다.
protected BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
//
BluetoothDevice bluetoothDevice = intent
.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (action.equals(BluetoothDevice.ACTION_BOND_STATE_CHANGED)) {
int state = bluetoothDevice.getBondState();
switch (state) {
case BluetoothDevice.BOND_BONDED:
Log.e("ida", " ");
connect();//
break;
case BluetoothDevice.BOND_BONDING:
Log.e("ida", "BOND_BONDING ");
break;
case BluetoothDevice.BOND_NONE:
break;
}
}
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
LogUtils.d(bluetoothDevice.getName() + "---" + bluetoothDevice.getAddress());
if (bluetoothDevice.getName() != null) {
if (bluetoothDevice.getName().equals(" ")) {
bluetoothDevice.createBond();
}
}
}
if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
int blueState = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 0);
switch (blueState) {
case BluetoothAdapter.STATE_TURNING_ON:
break;
case BluetoothAdapter.STATE_ON:
mBluetoothAdapter.startDiscovery();
Log.e("dalai", " ");
//startScanning();
break;
case BluetoothAdapter.STATE_TURNING_OFF:
break;
case BluetoothAdapter.STATE_OFF:
break;
}
}
if (action.equals(BluetoothAdapter.ACTION_DISCOVERY_FINISHED)) {
LogUtils.d(action);
mBluetoothAdapter.cancelDiscovery();
}
if (action.equals("android.bluetooth.device.action.PAIRING_REQUEST")) {// , pin ,
LogUtils.d(" ");
// bluetoothDevice.setPairingConfirmation(true);//
// bluetoothDevice.setPin("0000".getBytes());
}
}
};
private void connect() {
try {
btServerSocket = mBluetoothAdapter.listenUsingRfcommWithServiceRecord("BluetoothChat", MY_UUID);
} catch (IOException e) {
e.printStackTrace();
}
try {
bluetoothSocket = btServerSocket.accept();
} catch (IOException e) {
e.printStackTrace();
}
if (bluetoothSocket != null) {
try {
InputStream inputStream = bluetoothSocket.getInputStream();
OutputStream outputStream = bluetoothSocket.getOutputStream();
byte[] bytes = new byte[4];
inputStream.read(bytes);
String str = new String(bytes, "utf-8");
inputStream.close();
btServerSocket.close();
Log.e("ida", "this is read---" + str);
} catch (IOException e) {
e.printStackTrace();
}
}
}
다음은 클라이언트의 코드를 보겠습니다.
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
Set bondedDevices = mBluetoothAdapter.getBondedDevices();
for (BluetoothDevice device : bondedDevices) {
if (device.getName().equals("BleServer")) {
address = device.getAddress();
}
}
if (address != null) {
device = mBluetoothAdapter.getRemoteDevice(address);
try {
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(MY_UUID);
if (socket != null) {
socket.connect();
if (socket.isConnected()) {
Log.e("ida", " ");
OutputStream osm = socket.getOutputStream();
osm.write("1234".getBytes());
osm.close();//
socket.close();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
이렇게 하면 통신할 수 있다. 실제 응용에서 서비스 측은 일반적으로 서비스에서 완성해야 하고 입력 출력 흐름과 socket 연결을 제때에 닫아야 한다.
양호한 코드 규범도 매우 중요하다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.