Prior description:
Andoran teeth need to locate the right to apply, in the Android 6.0 users need to manually confirm the right to use, you can query the data to achieve, if it is troublesome, you can use the Third-party Bmob Integrated tool class implementation, detailed can see Http://blog.csdn.net/qq_ 30379689/article/details/52223244
Bluetooth connection process:
1, query whether the user to open Bluetooth.
2, search the vicinity of available Bluetooth.
3, Bluetooth pairing.
4, the Bluetooth connection.
5. Get input stream and output stream.
6, send the message.
To bask in the beauty of my own drawings:
Experiment Effect Chart:
To achieve the required permissions: since Android version 4.x above the use of Bluetooth, you need to turn on location permissions to search the nearby Bluetooth device
<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 "/>"
Service side
Realize the idea:
1, get the local Bluetooth equipment.
2, the communication between Bluetooth requires a unique identification UUID to match the correct device, using the UUID to obtain Bluetooth communication socket.
3, open the thread to get the data
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 ();
Get the local bluetooth device Btadapter = Bluetoothadapter.getdefaultadapter ();
/** * UI Text Output * * @param msg/public void Show (String msg) {sb.append (msg + "\ n");
Runonuithread (New Runnable () {@Override public void run () {Tv_msg.settext (sb.tostring ());
}
});
@Override public void OnClick (View v) {//open server Serverthread startserverthread = new Serverthread ();
Startserverthread.start (); /** * Open Server/private class Serverthread EXtends Thread {public void run () {try {bluetoothserversocket mserversocket = Btadapter.listenusingrfcommwithservi
Cerecord ("BTSPP", Uuid.fromstring ("00001101-0000-1000-8000-00805F9B34FB"));
Show ("Service side: Waiting for Connection");
Btsocket = Mserversocket.accept ();
Show ("Service side: Connection successful");
Readthread mreadthread = new Readthread ();
Mreadthread.start ();
Show ("Server: Start receiving data");
catch (IOException e) {e.printstacktrace (); }}/** * Read data/Private class Readthread extends Thread {public void run () {byte[] buffer = new by
TE[1024];
int bytes;
InputStream mminstream = null;
try {mminstream = Btsocket.getinputstream ();
Show ("Server: Get input stream");
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 ("Server: Read the data ~ ~" + s); catch (IOException e) {try {mminstream.close ();
catch (IOException E1) {e1.printstacktrace ();
} break;
}
}
}
}
}
Client
Realize the idea:
1, check whether to open Bluetooth.
2, register a series of Bluetooth broadcast.
3, by Yulan each stage will send a broadcast, according to the broadcast to achieve the corresponding method.
4, Bluetooth pairing-> bluetooth connection-> Send message (UUID must be the same)
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 ("Client: Check BT");
CHECKBT (this);
Show ("Client: Registered recipient");
Registerbtreceiver ();
/** * UI Text Output * * @param msg/public void Show (String msg) {sb.append (msg + "\ n");
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 ("Client: Start looking for device");
Btadapter.startdiscovery ();
Break
Case R.id.bt_send:sendmessage ();
Break
}/** * Check bluetooth */public void CHECKBT (context context) {Btadapter = Bluetoothadapter.getdefaultadapter (); if (btadapter!= null) {if (!)
Btadapter.isenabled ()) {Intent Intent = new Intent (bluetoothadapter.action_request_enable);
Set Bluetooth visibility, up to 300 seconds Intent.putextra (Bluetoothadapter.extra_discoverable_duration, 300);
Context.startactivity (Intent);
} else {System.out.println ("Local device driver exception!"); }/** * Open client/private class Clientthread extends Thread {public void run () {try {///Create a Socket connection: Only require the server to register with the UUID number Btsocket = Device.createrfcommsockettoservicerecord (Uuid.fromstring ("
00001101-0000-1000-8000-00805F9B34FB "));
Connect Show ("client: Start connecting ...");
Btsocket.connect ();
Show ("Client: Connection successful");
Start accepting data show ("Client: Start acceptance data"); Readthread MreadthrEAD = new Readthread ();
Mreadthread.start (); catch (IOException e) {Show ("Client: Connect service-side exception!")
Disconnect the connection and try again ");
E.printstacktrace (); }}/** * Read data/Private class Readthread extends Thread {public void run () {byte[] buffer = new by
TE[1024];
int bytes;
InputStream is = null;
try {is = Btsocket.getinputstream ();
Show ("Client: Get input stream");
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 ("Client: Read the data" + s);
} catch (IOException e) {try {is.close ();
catch (IOException E1) {e1.printstacktrace ();
} break; /** * Send data/public void SendMessage () {if (Btsocket = null) {Toast.maketext (this, no connection)
Toast.length_short). Show ();
Return try {outputstream OS = Btsocket.getouTputstream ();
Os.write ("I Love You dahsid132456@#%¥*". GetBytes ());
Os.flush ();
Show ("Client: Send information successfully");
catch (IOException e) {e.printstacktrace (); }/** * Registration broadcast/public void Registerbtreceiver () {//Set Broadcast information filter Intentfilter Intentfilter = new Intentfil
ter ();
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);
Registers the broadcast receiver, receives and processes the search result Registerreceiver (btreceive, Intentfilter);
/** * Logout broadcast/public void Unregisterbtreceiver () {unregisterreceiver (btreceive);
} @Override protected void OnDestroy () {Super.ondestroy ();
Unregisterbtreceiver (); /** * Broadcast receiver/private broadcastreceiver btreceive = new Broadcastreceiver () {@Override public void Onrec Eive (COntext context, Intent Intent) {String action = intent.getaction (); if (BluetoothDevice.ACTION_FOUND.equals (ACTION)) {device = Intent.getparcelableextra (Bluetoothdevice.extra_device)
;
Show ("Client: Found BT name:" + device.getname ());
If the device found matches the device to be connected, process if (Device.getname (). Equalsignorecase ("Xu")) {Show ("client: Pair Xu Bluetooth:");
The process of searching for Bluetooth devices takes up more resources, and once you find a device that needs to be connected, you need to close the search btadapter.canceldiscovery ();
Gets the connection status of the Bluetooth device int connectstate = Device.getbondstate ();
Switch (connectstate) {//Not paired case BluetoothDevice.BOND_NONE:show ("Client: Start pairing:");
try {Method Createbondmethod = BluetoothDevice.class.getMethod ("Createbond");
Createbondmethod.invoke (device);
catch (Exception e) {e.printstacktrace ();
} break;
Paired Case BluetoothDevice.BOND_BONDED:try {show ("Client: Start Connection:");
Clientthread clientconnectthread = new Clientthread ();
Clientconnectthread.start ();
catch (Exception e) {e.printstacktrace ();
} break; }} ELSE if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals (ACTION)) {//Get connection status of bluetooth device int connectstate = DEVICE.GETBONDST
Ate ();
Paired if (connectstate = = bluetoothdevice.bond_bonded) {try {Show ("Client: Start Connection:");
Clientthread clientconnectthread = new Clientthread ();
Clientconnectthread.start ();
catch (Exception e) {e.printstacktrace ();
}} show (action);
}
};
}
Bluetooth Broadcast content:
Action_state_changed when your Bluetooth is turned on or off, send
Action_found when you match to a nearby Bluetooth device, send
action_discovery_started when you start searching for a nearby Bluetooth device, send
Action_discovery_finished when you're done searching for a nearby Bluetooth device, send
action_bond_state_changed when your Bluetooth device matching status changes
SOURCE Download: Http://xiazai.jb51.net/201609/yuanma/Androidrobot (jb51.net). rar
The above is the entire content of this article, I hope to help you learn, but also hope that we support the cloud habitat community.