1.加入权限
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
2.代码:
package myapplication.com.myapplicationble; import android.app.Service; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothServerSocket; import android.bluetooth.BluetoothSocket; import android.content.Context; import android.content.Intent; import android.os.AsyncTask; import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.PopupMenu; import android.widget.PopupWindow; import android.widget.TextView; import android.widget.Toast; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.util.UUID; public class MainActivity extends AppCompatActivity { private BluetoothAdapter BA; BluetoothServerSocket mmServerSocket; private static String address = "20:16:09:26:81:80"; // <==应填写蓝牙串口模块的蓝牙地址。 private BluetoothSocket btSocket = null; private OutputStream outStream = null; public InputStream inStream = null; EditText editText; TextView textView; Button button, button1; private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } /** * 连接蓝牙 * **/ public void connect() { BA = BluetoothAdapter.getDefaultAdapter(); BluetoothDevice device = BA.getRemoteDevice(address); // pairedDevices = BA.getBondedDevices(); try { btSocket = device.createRfcommSocketToServiceRecord(MY_UUID); // new ReceiveDatas(btSocket).start(); } catch (IOException e) { } BA.cancelDiscovery(); try { btSocket.connect(); // String s="sm"; outStream = btSocket.getOutputStream(); // outStream.write(s.getBytes()); //outStream.write(0x41); inStream = btSocket.getInputStream(); while (true){ byte[] buffer = new byte[100]; int count = inStream.read(buffer); int a= inStream.available(); String ss= new String(buffer, 0, count, "utf-8"); System.out.println("***A"+ss);
// 输出信息缺少……不全,占时不会 } } catch (IOException e) { } try { // btSocket.close(); } catch (Exception e2) { // Log .e(TAG,"ON RESUME: Unable to close socket during connection failure", e2); } } public void initView() { editText = (EditText) findViewById(R.id.edit); textView = (TextView) findViewById(R.id.textView); button = (Button) findViewById(R.id.button); button1 = (Button) findViewById(R.id.button1); BA = BluetoothAdapter.getDefaultAdapter(); /** * 连接蓝牙 * */ button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { System.out.println("***11"); as(); } }); /** * 发送信息 * **/ button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String s = editText.getText().toString(); try { // outStream.write(s.getBytes()); 发送数据 outStream = btSocket.getOutputStream(); inStream=btSocket.getInputStream(); outStream.write("sm".getBytes()); outStream.write(" ".getBytes()); } catch (IOException e) { e.printStackTrace(); } } }); } /** * * 连接蓝牙 * **/ public void as() { new AsyncTask() { @Override protected String doInBackground(Object[] params) { connect(); return null; } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected void onPostExecute(Object o) { super.onPostExecute(o); Toast.makeText(getApplicationContext(), "2", Toast.LENGTH_SHORT).show(); } }.execute(); } }
3.操作图
<1>连接后发送数据oooo到蓝牙,接收端显示oooo
<2> 终端发送数据,手机端打印出数据ooooui [oooo]是打印的字符串,ui为接收的数据
修改——-->:
接受数据:
private class ConnectedThread extends Thread { private final BluetoothSocket socket; private final InputStream inputStream; private final OutputStream outputStream; public ConnectedThread(BluetoothSocket socket) { this.socket = socket; InputStream input = null; OutputStream output = null; try { input = socket.getInputStream(); output = socket.getOutputStream(); } catch (IOException e) { e.printStackTrace(); } this.inputStream = input; this.outputStream = output; } public void run() { byte[] buff = new byte[1024]; int bytes; while (true) { try { bytes = inputStream.read(buff); String str = new String(buff, "ISO-8859-1"); str = str.substring(0, bytes); Log.e("recv", str); Message message=handler.obtainMessage(); message.obj=str; handler.sendMessage(message); } catch (IOException e) { e.printStackTrace(); break; } } } public void write(byte[] bytes) { try { outputStream.write(bytes); } catch (IOException e) { e.printStackTrace(); } } public void cancel() { try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
---------------------------------------------------------------------------------------------------------------------------------------------------------
完成后代码:
1.权限:
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
2.Activity:
package myapplication.com.myapplicationble; import android.app.Service; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothServerSocket; import android.bluetooth.BluetoothSocket; import android.content.Context; import android.content.Intent; import android.os.AsyncTask; import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.PopupMenu; import android.widget.PopupWindow; import android.widget.TextView; import android.widget.Toast; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.Socket; import java.util.ArrayList; import java.util.UUID; public class MainActivity extends AppCompatActivity { private BluetoothAdapter BA; BluetoothServerSocket mmServerSocket; String message=""; private static String address = "20:16:09:26:81:80"; // <==应填写蓝牙串口模块的蓝牙地址。 private BluetoothSocket btSocket = null; private OutputStream outStream = null; public InputStream inStream = null; EditText editText; TextView textView; Button button, button1; boolean BluetoothFlag; private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } /** * 连接蓝牙 **/ public void connect() { BA = BluetoothAdapter.getDefaultAdapter(); BluetoothDevice device = BA.getRemoteDevice(address); // pairedDevices = BA.getBondedDevices(); try { btSocket = device.createRfcommSocketToServiceRecord(MY_UUID); } catch (IOException e) { } BA.cancelDiscovery(); try { btSocket.connect(); // String s="sm"; outStream = btSocket.getOutputStream(); //outStream.write(s.getBytes()); //outStream.write(0x41); inStream = btSocket.getInputStream(); // while (true){ // byte[] buffer = new byte[1]; // int length = 0; // byte bb = 0; // String line = null; // ArrayList<Byte> list = new ArrayList<Byte>(); // while (inStream.read(buffer) == -1) { // try { // Thread.sleep(100); // } catch (InterruptedException e) { // e.printStackTrace(); // } // System.out.print("-->" +inStream.read(buffer)); // } // } /*** * 1 * **/ // while (true) { // // if(inStream.available()>=0){ // byte[] buffer = new byte[1024]; // int count = inStream.read(buffer); // // System.out.println("***MAX:" + a); // String ss = new String(buffer, 0, count, "utf-8"); // System.out.println("*--" + ss); // } // // } /**** * 2 * */ // BluetoothFlag = true; // MyThread bluetoothThread = new MyThread(); // bluetoothThread.start(); /*** * * 3 * */ ConnectedThread connectedThread = new ConnectedThread(btSocket); connectedThread.start(); } catch (IOException e) { } try { // btSocket.close(); } catch (Exception e2) { // Log .e(TAG,"ON RESUME: Unable to close socket during connection failure", e2); } } public void initView() { editText = (EditText) findViewById(R.id.edit); textView = (TextView) findViewById(R.id.textView); button = (Button) findViewById(R.id.button); button1 = (Button) findViewById(R.id.button1); BA = BluetoothAdapter.getDefaultAdapter(); /** * 连接蓝牙 * */ button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { System.out.println("***11"); as(); } }); /** * 发送信息 * **/ button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String s = editText.getText().toString(); try { outStream = btSocket.getOutputStream(); inStream = btSocket.getInputStream(); // outStream.write(" ".getBytes()); outStream.write("sm".getBytes()); outStream.write(" ".getBytes()); } catch (IOException e) { e.printStackTrace(); } } }); } /** * 连接蓝牙 **/ public void as() { new AsyncTask() { @Override protected String doInBackground(Object[] params) { connect(); return null; } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected void onPostExecute(Object o) { super.onPostExecute(o); Toast.makeText(getApplicationContext(), "2", Toast.LENGTH_SHORT).show(); } }.execute(); } /** * 在接受不到数据 * **/ private class ConnectedThread extends Thread { private final BluetoothSocket socket; private final InputStream inputStream; private final OutputStream outputStream; public ConnectedThread(BluetoothSocket socket) { this.socket = socket; InputStream input = null; OutputStream output = null; try { input = socket.getInputStream(); output = socket.getOutputStream(); } catch (IOException e) { e.printStackTrace(); } this.inputStream = input; this.outputStream = output; } public void run() { byte[] buff = new byte[1024]; int bytes; while (true) { try { bytes = inputStream.read(buff); String str = new String(buff, "ISO-8859-1"); str = str.substring(0, bytes); Log.e("recv", str); Message message=handler.obtainMessage(); message.obj=str; handler.sendMessage(message); } catch (IOException e) { e.printStackTrace(); break; } } } public void write(byte[] bytes) { try { outputStream.write(bytes); } catch (IOException e) { e.printStackTrace(); } } public void cancel() { try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { String s= (String) msg.obj; message=message+s; if(message.contains("RTS_Mon->")){ textView.setText(message); } } }; }
3.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="myapplication.com.myapplicationble.MainActivity"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> <EditText android:layout_below="@+id/textView" android:id="@+id/edit" android:layout_width="match_parent" android:textColor="@color/hei" android:layout_height="wrap_content"/> <Button android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/button" android:layout_below="@+id/edit" android:text="send" /> <Button android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/button1" android:layout_below="@+id/button" android:text="lianjie" /> </RelativeLayout>
code:链接:http://pan.baidu.com/s/1jHAL0WI 密码:xvss