안 드 로 이 드 안 드 로 이 드 6.0 블 루 투 스 통신 실현 과정

미리 설명:
안 드 로 이 드 블 루 투 스 는 포 지 셔 닝 권한 신청 이 필요 합 니 다.안 드 로 이 드 6.0 은 사용자 가 수 동 으로 권한 을 확인 해 야 사용 할 수 있 습 니 다.여러분 은 스스로 자 료 를 조회 하여 실현 할 수 있 습 니 다.귀 찮 으 면 제3자 Bmob 로 통 합 된 도구 류 로 실현 할 수 있 습 니 다.상세 하 게 볼 수 있 습 니 다.http://blog.csdn.net/qq_30379689/article/details/52223244
블 루 투 스 연결 과정:
1.사용자 가 블 루 투 스 를 켜 는 지 확인 합 니 다.
2,근처에 사용 가능 한 블 루 투 스 를 검색 합 니 다.
3.블 루 투 스 짝 짓 기 를 한다.
4.블 루 투 스 연결 을 한다.
5.입력 흐름 과 출력 흐름 가 져 오기.
6.메 시 지 를 보 냅 니 다.
내 가 그린 아름 다운 그림 을 말 려 라.

실험 효과 도:

필요 한 권한 실현:안 드 로 이 드 4.x 이상 버 전 은 블 루 투 스 를 사용 하기 때문에 위치 추적 권한 을 켜 야 근처 블 루 투 스 장 치 를 검색 할 수 있 습 니 다.

<uses-permission android:name="android.permission.BLUETOOTH"/> 
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> 
 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
서버
실현 방향:
1.로 컬 블 루 투 스 설 비 를 가 져 옵 니 다.
2.블 루 투 스 간 통신 은 정확 한 장치 와 일치 하 는 UUID 를 식별 하 는 유일한 장치 가 필요 합 니 다.UUID 를 사용 하여 블 루 투 스 의 통신 Socket 을 가 져 옵 니 다.
3.데 이 터 를 가 져 오 는 스 레 드 열기

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 
 
 BluetoothSocket BTSocket; 
 BluetoothAdapter BTAdapter; 
 Button bt_start; 
 TextView tv_msg; 
 StringBuilder sb; 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 bt_start = (Button) findViewById(R.id.bt_start); 
 tv_msg = (TextView) findViewById(R.id.tv_msg); 
 bt_start.setOnClickListener(this); 
 sb = new StringBuilder(); 
 //         
 BTAdapter = BluetoothAdapter.getDefaultAdapter(); 
 } 
 
 /** 
 * UI     
 * 
 * @param msg 
 */ 
 public void show(String msg) { 
 sb.append(msg + "
"); runOnUiThread(new Runnable() { @Override public void run() { tv_msg.setText(sb.toString()); } }); } @Override public void onClick(View v) { // ServerThread startServerThread = new ServerThread(); startServerThread.start(); } /** * */ private class ServerThread extends Thread { public void run() { try { BluetoothServerSocket mserverSocket = BTAdapter.listenUsingRfcommWithServiceRecord("btspp", UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")); show(" : "); BTSocket = mserverSocket.accept(); show(" : "); readThread mreadThread = new readThread(); mreadThread.start(); show(" : "); } catch (IOException e) { e.printStackTrace(); } } } /** * */ private class readThread extends Thread { public void run() { byte[] buffer = new byte[1024]; int bytes; InputStream mmInStream = null; try { mmInStream = BTSocket.getInputStream(); show(" : "); } catch (IOException e1) { e1.printStackTrace(); } while (true) { try { if ((bytes = mmInStream.read(buffer)) > 0) { byte[] buf_data = new byte[bytes]; for (int i = 0; i < bytes; i++) { buf_data[i] = buffer[i]; } String s = new String(buf_data); show(" : ~~" + s); } } catch (IOException e) { try { mmInStream.close(); } catch (IOException e1) { e1.printStackTrace(); } break; } } } } }
클 라 이언 트
실현 방향:
1.블 루 투 스 오픈 여 부 를 확인 합 니 다.
2.일련의 블 루 투 스 방송 을 등록 합 니 다.
3.블 루 투 스 는 한 단 계 를 거 칠 때마다 하나의 방송 을 보 내 고 방송 에 따라 대응 하 는 방법 을 실현 하기 때 문 입 니 다.
4.블 루 투 스 짝 짓 기->블 루 투 스 연결->메시지 보 내기(UUID 동일 해 야 함)

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 
 
 private TextView tv_msg; 
 private Button bt_search, bt_send; 
 private BluetoothSocket BTSocket; 
 private BluetoothAdapter BTAdapter; 
 private BluetoothDevice device; 
 private StringBuilder sb; 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 
 bt_search = (Button) findViewById(R.id.bt_search); 
 bt_send = (Button) findViewById(R.id.bt_send); 
 tv_msg = (TextView) findViewById(R.id.tv_msg); 
 bt_search.setOnClickListener(this); 
 bt_send.setOnClickListener(this); 
 sb = new StringBuilder(); 
 
 show("   :  BT"); 
 checkBT(this); 
 show("   :     "); 
 registerBTReceiver(); 
 } 
 
 /** 
 * UI     
 * 
 * @param msg 
 */ 
 public void show(String msg) { 
 sb.append(msg + "
"); runOnUiThread(new Runnable() { @Override public void run() { tv_msg.setText(sb.toString()); } }); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.bt_search: show(" : "); BTAdapter.startDiscovery(); break; case R.id.bt_send: sendMessage(); break; } } /** * */ public void checkBT(Context context) { BTAdapter = BluetoothAdapter.getDefaultAdapter(); if (BTAdapter != null) { if (!BTAdapter.isEnabled()) { Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); // , 300 intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300); context.startActivity(intent); } } else { System.out.println(" !"); } } /** * */ private class clientThread extends Thread { public void run() { try { // Socket : UUID BTSocket = device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")); // show(" : ..."); BTSocket.connect(); show(" : "); // show(" : "); readThread mreadThread = new readThread(); mreadThread.start(); } catch (IOException e) { show(" : ! "); e.printStackTrace(); } } } /** * */ private class readThread extends Thread { public void run() { byte[] buffer = new byte[1024]; int bytes; InputStream is = null; try { is = BTSocket.getInputStream(); show(" : "); } catch (IOException e1) { e1.printStackTrace(); } while (true) { try { if ((bytes = is.read(buffer)) > 0) { byte[] buf_data = new byte[bytes]; for (int i = 0; i < bytes; i++) { buf_data[i] = buffer[i]; } String s = new String(buf_data); show(" : " + s); } } catch (IOException e) { try { is.close(); } catch (IOException e1) { e1.printStackTrace(); } break; } } } } /** * */ public void sendMessage() { if (BTSocket == null) { Toast.makeText(this, " ", Toast.LENGTH_SHORT).show(); return; } try { OutputStream os = BTSocket.getOutputStream(); os.write(" dahsid132456@#%¥*".getBytes()); os.flush(); show(" : "); } catch (IOException e) { e.printStackTrace(); } } /** * */ public void registerBTReceiver() { // IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(BluetoothDevice.ACTION_FOUND); intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED); intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED); intentFilter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED); // , registerReceiver(BTReceive, intentFilter); } /** * */ public void unregisterBTReceiver() { unregisterReceiver(BTReceive); } @Override protected void onDestroy() { super.onDestroy(); unregisterBTReceiver(); } /** * */ private BroadcastReceiver BTReceive = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (BluetoothDevice.ACTION_FOUND.equals(action)) { device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); show(" : BT :" + device.getName()); // , if (device.getName().equalsIgnoreCase("xu")) { show(" : xu :"); // , BTAdapter.cancelDiscovery(); // int connectState = device.getBondState(); switch (connectState) { // case BluetoothDevice.BOND_NONE: show(" : :"); try { Method createBondMethod = BluetoothDevice.class.getMethod("createBond"); createBondMethod.invoke(device); } catch (Exception e) { e.printStackTrace(); } break; // case BluetoothDevice.BOND_BONDED: try { show(" : :"); clientThread clientConnectThread = new clientThread(); clientConnectThread.start(); } catch (Exception e) { e.printStackTrace(); } break; } } } else if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) { // int connectState = device.getBondState(); // if (connectState == BluetoothDevice.BOND_BONDED) { try { show(" : :"); clientThread clientConnectThread = new clientThread(); clientConnectThread.start(); } catch (Exception e) { e.printStackTrace(); } } } show(action); } }; }
블 루 투 스 방송 내용:
ACTION_STATE_CHANGED   블 루 투 스 가 켜 지 거나 꺼 졌 을 때 보 냅 니 다.
ACTION_FOUND  근처 블 루 투 스 장치 와 일치 할 때 보 내기
ACTION_DISCOVERY_STARTED  근처 블 루 투 스 장 치 를 검색 하기 시 작 했 을 때 보 냅 니 다.
ACTION_DISCOVERY_FINISHED  근처 블 루 투 스 장치 검색 이 끝 났 을 때 보 냅 니 다.
ACTION_BOND_STATE_CHANGED  블 루 투 스 장치 일치 상태 가 바 뀌 었 을 때 보 내기
원본 다운로드:http://xiazai.jb51.net/201609/yuanma/Androidrobot(jb51.net).rar
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기