안 드 로 이 드 안 드 로 이 드 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
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.