1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Android Studio开发蓝牙应用(二)

Android Studio开发蓝牙应用(二)

时间:2019-10-27 15:38:46

相关推荐

Android Studio开发蓝牙应用(二)

Android Studio开发蓝牙应用(二)

实现的功能

与蓝牙模块HC-06交换信息

过程

新建Empty Activity

创建布局

activity_btread_and_write.xml

<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="0dp"android:gravity="fill_vertical"android:text="蓝牙状态:"android:textSize="24sp"app:layout_constraintBottom_toBottomOf="@+id/button6"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/textView2"android:layout_width="152dp"android:layout_height="46dp"android:gravity="fill_vertical"android:text="连接中"android:textColor="#00BCD4"android:textSize="24sp"app:layout_constraintBottom_toBottomOf="@+id/button6"app:layout_constraintStart_toEndOf="@+id/textView"app:layout_constraintTop_toTopOf="parent" /><Buttonandroid:id="@+id/button6"android:layout_width="0dp"android:layout_height="wrap_content"android:text="断开/连接"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toEndOf="@+id/textView2"app:layout_constraintTop_toTopOf="parent" /><ListViewandroid:id="@+id/listView"android:layout_width="0dp"android:layout_height="0dp"app:layout_constraintBottom_toTopOf="@+id/textView4"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.538"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/textView3" /><TextViewandroid:id="@+id/textView3"android:layout_width="0dp"android:layout_height="wrap_content"android:background="#03A9F4"android:gravity="center"android:text="接收信息"android:textSize="24sp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/button6" /><TextViewandroid:id="@+id/textView4"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#00BCD4"android:gravity="center"android:text="发送数据"android:textSize="24sp"app:layout_constraintBottom_toTopOf="@+id/editTextTextPersonName"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.0"app:layout_constraintStart_toStartOf="parent" /><EditTextandroid:id="@+id/editTextTextPersonName"android:layout_width="0dp"android:layout_height="49dp"android:ems="10"android:inputType="textPersonName"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toStartOf="@+id/button7"app:layout_constraintStart_toStartOf="parent" /><Buttonandroid:id="@+id/button7"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Button"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintTop_toTopOf="@+id/editTextTextPersonName"app:layout_constraintVertical_bias="1.0"android:onClick="sead_msg"/></androidx.constraintlayout.widget.ConstraintLayout>

修改之前的listview点击监听事件

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {CharSequence content = ((TextView) view).getText();String con = content.toString();String[] conArray = con.split("\n");String rightStr = conArray[1].substring(5, conArray[1].length());BluetoothDevice device = mController.find_device(rightStr);if (device.getBondState() == 10) {mController.cancelSearch();String s = "设备名:" + device.getName() + "\n" + "设备地址:" + device.getAddress() + "\n" + "连接状态:未配对" + "\n";deviceName.remove(s);device.createBond();s = "设备名:" + device.getName() + "\n" + "设备地址:" + device.getAddress() + "\n" + "连接状态:已配对" + "\n";deviceName.add(s);adapter1.notifyDataSetChanged();showToast("配对:" + device.getName());}else{mController.cancelSearch();String s2 = "设备名:" + device.getName() + "\n" + "设备地址:" + device.getAddress() + "\n" + "连接状态:已配对" + "\n";if(deviceName.contains(s2)) {Intent intent = new Intent(MainActivity.this, BTReadAndWrite.class);Bundle bundle = new Bundle();bundle.putString("deviceAddr", device.getAddress());intent.putExtras(bundle);startActivity(intent);finish();}}}});

BTReadAndWrite.java

package com.example.btapp;import androidx.annotation.NonNull;import androidx.appcompat.app.AppCompatActivity;import androidx.collection.ArraySet;import androidx.core.app.ActivityCompat;import android.Manifest;import android.bluetooth.BluetoothDevice;import android.bluetooth.BluetoothSocket;import android.content.Intent;import android.os.Build;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.View;import android.widget.ArrayAdapter;import android.widget.EditText;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;import java.util.UUID;public class BTReadAndWrite extends AppCompatActivity {// 需求列表private ArrayList<String> requestList = new ArrayList<>();// 常量private int REQ_PERMISSION_CODE = 1;// 蓝牙服务private BluetoothSocket bluetoothSocket;// 延时创建Toast类,private Toast mToast;// 实例化BTclientprivate BTclient bTclient = new BTclient();// 实例化蓝牙适配器类public BlueToothController mController = new BlueToothController();// 存放接收数据public Byte[] mmbuffer;// 消息列表public ArrayList<String> msglist = new ArrayList<>();// listview控件public ListView listView;// ArrayAdapterpublic ArrayAdapter adapter1;// 读取数据线程public readThread readthread = new readThread();// 文字输入框public EditText editText;// 活动间消息传递public Handler mHandler;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_btread_and_write);// 根据ID获取listview和editTextlistView = (ListView) findViewById(R.id.listView);editText = (EditText) findViewById(R.id.editTextTextPersonName);// 实例化ArrayAdapteradapter1 = new ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1, msglist);// 设置listviewlistView.setAdapter(adapter1);// 获取intentIntent intent = getIntent();// 获取intent传来的数据Bundle bundle = intent.getExtras();// 连接服务bTclient.connectDevice(mController.find_device(bundle.getString("deviceAddr")));// 服务线程开始bTclient.start();// 实例化HandlermHandler = new Handler(){@Overridepublic void handleMessage(@NonNull Message msg) {super.handleMessage(msg);switch (msg.what){case 1:String s = msg.obj.toString();msglist.add("接收数据:" + s);adapter1.notifyDataSetChanged();}}};}public void sead_msg(View view) {String s = editText.getText().toString();if (s.length() != 0){sendMessageHandle(s);msglist.add("发送数据:" + s + "\n");adapter1.notifyDataSetChanged();}}private class BTclient extends Thread{private void connectDevice(BluetoothDevice device){try {getPermision();bluetoothSocket = device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));bluetoothSocket.connect();readthread.start();showToast("蓝牙连接成功");} catch (IOException e) {e.printStackTrace();showToast("蓝牙连接失败");}}}public void getPermision(){if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S){requestList.add(Manifest.permission.BLUETOOTH_SCAN);requestList.add(Manifest.permission.BLUETOOTH_ADVERTISE);requestList.add(Manifest.permission.BLUETOOTH_CONNECT);requestList.add(Manifest.permission.ACCESS_FINE_LOCATION);requestList.add(Manifest.permission.ACCESS_COARSE_LOCATION);requestList.add(Manifest.permission.BLUETOOTH);}if(requestList.size() != 0){ActivityCompat.requestPermissions(this, requestList.toArray(new String[0]), REQ_PERMISSION_CODE);}}public void showToast(String text){if( mToast == null){mToast = Toast.makeText(this, text, Toast.LENGTH_SHORT);}else{mToast.setText(text);}mToast.show();}//发送数据public void sendMessageHandle(String msg){getPermision();if (bluetoothSocket == null){showToast("没有连接");return;}try {OutputStream os = bluetoothSocket.getOutputStream();os.write(msg.getBytes()); //发送出去的值为:msg} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}//读取数据private class readThread extends Thread {private static final String TAG = "";public void run() {super.run();byte[] buffer = new byte[1024];int bytes;InputStream mmInStream = null;try {mmInStream = bluetoothSocket.getInputStream();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}while (true) {try {// Read from the InputStreamif( (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);//接收的值inputstream 为 sLog.e(TAG, "run: " + s);Message message = Message.obtain();message.what = 1;message.obj = s;mHandler.sendMessage(message);if(s.equalsIgnoreCase("o")){//o表示opend!showToast("open");}else if(s.equalsIgnoreCase("c")){//c表示closed!showToast("closed");}}} catch (IOException e) {try {mmInStream.close();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}break;}}}}}

蓝牙模块的使用

使用arduino连接HC-06

HC-06与arduino连接的方式

VCC -> 5VGND -> GNDTX -> 8RX -> 9

arduino程序

#include <SoftwareSerial.h>int i = 0;SoftwareSerial BT(8, 9); //新建对象,接收脚为8,发送脚为9char val; //存储接收的变量void setup() {Serial.begin(9600); //与电脑的串口连接Serial.println("BT is ready!");BT.begin(9600); //设置波特率}void loop() {//如果串口接收到数据,就输出到蓝牙串口if (Serial.available()) {val = Serial.read();BT.print(val);}//如果接收到蓝牙模块的数据,输出到屏幕if (BT.available()) {val = BT.read();Serial.print(val);}delay(300);}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。