Android蓝牙2.0连接以及数据接收发送
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("\r\n".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("\r\n".getBytes());
- outStream.write("sm".getBytes());
- outStream.write("\r\n".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
Android蓝牙2.0连接以及数据接收发送的更多相关文章
- Android蓝牙连接以及数据接收发送
1.加入权限 <uses-feature android:name="android.hardware.bluetooth_le" android:required=&quo ...
- Android 蓝牙4.0的连接和通讯
1.加入权限 <uses-sdk android:minSdkVersion=" android:targetSdkVersion="/> <uses-featu ...
- ym——物联网入口之中的一个Android蓝牙4.0
转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! 假设还有同学不知道蓝牙4.0能够做什么请查看Android+蓝牙 4.0 将带来什么? ...
- Android 蓝牙4.0 BLE
Android ble (Bluetooth Low Energy) 蓝牙4.0,也就是说API level >= 18,且支持蓝牙4.0的手机才可以使用. BLE是蓝牙4.0的核心Profil ...
- android 蓝牙4.0 开发介绍
最近一直在研究一个蓝牙功能 由于本人是菜鸟 学起来比较忙 一直搞了好久才弄懂 , 网上对蓝牙4.0也就是几个个dome 抄来抄去,全是英文注解 , 对英语不好的朋友来说 真是硬伤 , 一些没必要的描 ...
- Android 蓝牙4.0 BLE (onServicesDiscovered 返回 status 是 129,133时)
Android ble (Bluetooth Low Energy) 蓝牙4.0,也就是说android 4.3+, API level >= 18,且支持蓝牙4.0的手机才可以使用. BLE是 ...
- .Net2.0连接PG数据注意事项
.Net2.0连接PG数据注意事项 第一次用.net操作PG[.NET2.0] 一:Npgsql版本问题 1:如果是.net2.0 建议用2.0.11.0[NuGet搜索npgsql第一个的最低版本 ...
- android 蓝牙4.0多通道
很久没记录东西了,前段时间研究了一哈android4.0控制多个外设的情况,注意,需要使用android版本4.3以上,蓝牙4.0及以上. 我这里使用的控制蓝牙灯泡,使用android4.3的手机,手 ...
- Android 蓝牙( Bluetooth)耳机连接分析及实现
Android 实现了对Headset 和Handsfree 两种profile 的支持.其实现核心是BluetoothHeadsetService,在PhoneApp 创建的时候会启动它. if ( ...
随机推荐
- Jmeter报内存溢出解决方案
描述:wimdows环境,做上传图片接口测试,涉及图片合成和上传,图片采用base64编码.每1s启动200线程的时候,Jmeter报内存溢出错误. 解决方案: 1.修改jmeter.bat: set ...
- 图片放大不失真软件PhotoZoom如何使用?
PhotoZoom可以将我们一些过于像素低的照片可以无失真放大,那么PhotoZoom是如何实现无失真照片放大的呢? 以上图像中的编号表示每个步骤应操作的位置. 单击“打开”,并选择您想调整大小的图像 ...
- Oracle语句执行顺序
- jsmind实现思维导图,和echars 的tree图类似
https://blog.csdn.net/qq_41619796/article/details/88552029
- BA--干球温度、露点温度和湿球温度--概念
1. 干球温度.露点温度和湿球温度 dry bulb temperature, dew temperature, and wet-bulb temperature 摘要:未饱和湿空气中水蒸汽处于过热状 ...
- 【HDOJ 2063】过山车
[HDOJ 2063]过山车 二分图最大匹配模板题 1女对n男 问匹配最大对数 代码例如以下: #include <iostream> #include <cstdlib> # ...
- muduo总结
总结说的有的过大,算是对自己学习的一个总结.兴许会不断补充. 模型总结 muduo是基于非堵塞的IO和事件驱动的网络库. muduo的总体结构时one loop per thread+threadpo ...
- jsp 传值jsp 数据库 乱码解决的攻略 全套
jsp传值给jsp中文乱码 传值给数据库乱码的解决方法 所有的用到编码的所有统一utf-8 1.装mysql的时候有选择编码的界面的那个地方选utf-8编码 2 建数据库的时候选择 字符集 排序规则所 ...
- 【iOS开发系列】UIDevice设备信息
[1] 推断是否是横向屏: BOOL b=UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation); 获取设备uniqu ...
- java根据汉字获取全拼和首字母
import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCase ...