您的位置:首页 > 房产 > 家装 > 宠物寄养网站毕业设计_怒火一刀代理平台_网站入口_企业网站的主要类型有

宠物寄养网站毕业设计_怒火一刀代理平台_网站入口_企业网站的主要类型有

2024/10/31 2:31:26 来源:https://blog.csdn.net/qq_44693047/article/details/143249152  浏览:    关键词:宠物寄养网站毕业设计_怒火一刀代理平台_网站入口_企业网站的主要类型有
宠物寄养网站毕业设计_怒火一刀代理平台_网站入口_企业网站的主要类型有

最近接了一个新需求:

内容: 通过手机app实现蓝牙连接称重设备,实现app获取设备重量并接入业务

语言以及工具:

        1、flutter  + java安卓原生      

        2、某某牌蓝牙称重蓝牙硬件板块(称榜上拆下来的):

前面走过的坑(只对于我接手的项目而已,并不是说以下文档插件不好):

1、flutter_weigh_serial 1.0.0+2

这个插件我试了,但是和我的gradle版本不兼容,就被我舍弃了

2、bluetooth_print  这个热敏蓝牙打印插件我也试了,可以搜索到该蓝牙设备,但是连接不了

 最后没办法,还是老老实实写原生方法

1、建立flutter与原生通道

new MethodChannel(Objects.requireNonNull(getFlutterEngine()).getDartExecutor().getBinaryMessenger(), WEIGHTGET).setMethodCallHandler((call, result) -> {if (call.method.equals("getCount")) {System.out.println("连接状态" + isopen);if(isopen){mBLE_Service.disconnect();isopen = false;result.success(isopen);return;}isopen = true;///==========================Intent data = getIntent();mdevice  = data.getParcelableExtra("Device");UART_UUID = data.getStringExtra("DeviceUART");TXO_UUID = data.getStringExtra("DeviceTXO");RXI_UUID = data.getStringExtra("DeviceRXI");//                        sevice = UUID.fromString(UART_UUID);
//                        txo = UUID.fromString(TXO_UUID);
//                        rxi = UUID.fromString(RXI_UUID);sevice = UUID.fromString("0000FFE0-0000-1000-8000-00805F9B34FB");txo = UUID.fromString("0000FFE1-0000-1000-8000-00805F9B34FB");rxi = UUID.fromString("0000FFE1-0000-1000-8000-00805F9B34FB");// 如果 mdevice 为 null 或者需要设置默认地址if (mdevice == null || mdevice.getAddress() == null || mdevice.getAddress().isEmpty()) {String defaultAddress = "88:25:83:F4:F7:4A";mdevice = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(defaultAddress);}mBLE_Service.setUUID(sevice,txo,rxi);mBLE_Service.disconnect();mBLE_Service.connect(mdevice, this);result.success(isopen);/======================} else {result.notImplemented();}});

        上面的UUID直接写死固定设备,包括设备的蓝牙地址我都是先直接写死

2、监听蓝牙模块的响应数据

SpBLE mBLE_Service;
mBLE_Service = new SpBLE(this,mHandler);

 封装好的蓝牙服务类文件

package com.example.yunhan_demo;import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothServerSocket;
import android.bluetooth.BluetoothSocket;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;/*** This class does all the work for setting up and managing Bluetooth* connections with other devices. It has a thread that listens for* incoming connections, a thread for connecting with a device, and a* thread for performing data transmissions when connected.*/
public class BluetoothChatService {// Debuggingprivate static final String TAG = "BluetoothChatService";private static final boolean D = true;// Name for the SDP record when creating server socketprivate static final String NAME = "BluetoothCom";// Unique UUID for this application //Bluetooth serial boardprivate static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");//private static final UUID MY_UUID = UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66");//Hint: If you are connecting to a Bluetooth serial board then try using the well-known SPP UUID 00001101-0000-1000-8000-00805F9B34FB. //However if you are connecting to an Android peer then please generate your own unique UUID.// Member fieldsprivate final BluetoothAdapter mAdapter;private final Handler mHandler;private AcceptThread mAcceptThread;private ConnectThread mConnectThread;private ConnectedThread mConnectedThread;private int mState;// Constants that indicate the current connection statepublic static final int STATE_NONE = 0;       // we're doing nothingpublic static final int STATE_LISTEN = 1;     // now listening for incoming connectionspublic static final int STATE_CONNECTING = 2; // now initiating an outgoing connectionpublic static final int STATE_CONNECTED = 3;  // now connected to a remote device/*** Constructor. Prepares a new BluetoothChat session.* @param context  The UI Activity Context* @param handler  A Handler to send messages back to the UI Activity*/public BluetoothChatService(Context context, Handler handler) {mAdapter = BluetoothAdapter.getDefaultAdapter();mState = STATE_NONE;mHandler = handler;}/*** Set the current state of the chat connection* @param state  An integer defining the current connection state*/private synchronized void setState(int state) {if (D) Log.d(TAG, "setState() " + mState + " -> " + state);mState = state;// Give the new state to the Handler so the UI Activity can updatemHandler.obtainMessage(MainActivity.MESSAGE_STATE_CHANGE, state, -1).sendToTarget();}/*** Return the current connection state. */public synchronized int getState() {return mState;}/*** Start the chat service. Specifically start AcceptThread to begin a* session in listening (server) mode. Called by the Activity onResume() */public synchronized void start() {if (D) Log.d(TAG, "start");// Cancel any thread attempting to make a connectionif (mConnectThread != null) {mConnectThread.cancel(); mConnectThread = null;}// Cancel any thread currently running a connectionif (mConnectedThread != null) {mConnectedThread.cancel(); mConnectedThread = null;}// Start the thread to listen on a BluetoothServerSocketif (mAcceptThread == null) {mAcceptThread = new AcceptThread();mAcceptThread.start();}setState(STATE_LISTEN);}/*** Start the ConnectThread to initiate a connection to a remote device.* @param device  The BluetoothDevice to connect*/public synchronized void connect(BluetoothDevice device) {if (D) Log.d(TAG, "connect to: " + device);// Cancel any thread attempting to make a connectionif (mState == STATE_CONNECTING) {if (mConnectThread != null) {mConnectThread.cancel(); mConnectThread = null;}}// Cancel any thread currently running a connectionif (mConnectedThread != null) {mConnectedThread.cancel(); mConnectedThread = null;}// Start the thread to connect with the given devicemConnectThread = new ConnectThread(device);mConnectThread.start();setState(STATE_CONNECTING);}/*** Start the ConnectedThread to begin managing a Bluetooth connection* @param socket  The BluetoothSocket on which the connection was made* @param device  The BluetoothDevice that has been connected*/public synchronized void connected(BluetoothSocket socket, BluetoothDevice device) {if (D) Log.d(TAG, "connected");// Cancel the thread that completed the connectionif (mConnectThread != null) {mConnectThread.cancel(); mConnectThread = null;}// Cancel any thread currently running a connectionif (mConnectedThread != null) {mConnectedThread.cancel(); mConnectedThread = null;}// Cancel the accept thread because we only want to connect to one deviceif (mAcceptThread != null) {mAcceptThread.cancel(); mAcceptThread = null;}// Start the thread to manage the connection and perform transmissionsmConnectedThread = new ConnectedThread(socket);mConnectedThread.start();// Send the name of the connected device back to the UI ActivityMessage msg = mHandler.obtainMessage(MainActivity.MESSAGE_DEVICE_NAME);Bundle bundle = new Bundle();bundle.putString(MainActivity.DEVICE_NAME, device.getName());msg.setData(bundle);mHandler.sendMessage(msg);setState(STATE_CONNECTED);}/*** Stop all threads*/public synchronized void stop() {if (D) Log.d(TAG, "stop");if (mConnectThread != null) {mConnectThread.cancel(); mConnectThread = null;}if (mConnectedThread != null) {mConnectedThread.cancel(); mConnectedThread = null;}if (mAcceptThread != null) {mAcceptThread.cancel(); mAcceptThread = null;}setState(STATE_NONE);}/*** Write to the ConnectedThread in an unsynchronized manner* @param out The bytes to write* @see ConnectedThread#write(byte[])*/public void write(byte[] out) {// Create temporary objectConnectedThread r;// Synchronize a copy of the ConnectedThreadsynchronized (this) {if (mState != STATE_CONNECTED) return;r = mConnectedThread;}// Perform the write unsynchronizedr.write(out);}/*** Indicate that the connection attempt failed and notify the UI Activity.*/private void connectionFailed() {setState(STATE_LISTEN);// Send a failure message back to the ActivityMessage msg = mHandler.obtainMessage(MainActivity.MESSAGE_TOAST);Bundle bundle = new Bundle();bundle.putString(MainActivity.TOAST, "连接失败");msg.setData(bundle);mHandler.sendMessage(msg);}/*** Indicate that the connection was lost and notify the UI Activity.*/private void connectionLost() {setState(STATE_LISTEN);// Send a failure message back to the ActivityMessage msg = mHandler.obtainMessage(MainActivity.MESSAGE_TOAST);Bundle bundle = new Bundle();bundle.putString(MainActivity.TOAST, "蓝牙已断开连接");msg.setData(bundle);mHandler.sendMessage(msg);}/*** This thread runs while listening for incoming connections. It behaves* like a server-side client. It runs until a connection is accepted* (or until cancelled).*/private class AcceptThread extends Thread {// The local server socketprivate final BluetoothServerSocket mmServerSocket;public AcceptThread() {BluetoothServerSocket tmp = null;// Create a new listening server sockettry {tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME, MY_UUID);} catch (IOException e) {Log.e(TAG, "listen() failed", e);}mmServerSocket = tmp;}public void run() {if (D) Log.d(TAG, "BEGIN mAcceptThread" + this);setName("AcceptThread");BluetoothSocket socket = null;// Listen to the server socket if we're not connectedwhile (mState != STATE_CONNECTED) {try {// This is a blocking call and will only return on a// successful connection or an exceptionsocket = mmServerSocket.accept();} catch (IOException e) {// Log.e(TAG, "accept() failed", e);break;}// If a connection was acceptedif (socket != null) {synchronized (BluetoothChatService.this) {switch (mState) {case STATE_LISTEN:case STATE_CONNECTING:// Situation normal. Start the connected thread.connected(socket, socket.getRemoteDevice());break;case STATE_NONE:case STATE_CONNECTED:// Either not ready or already connected. Terminate new socket.try {socket.close();} catch (IOException e) {Log.e(TAG, "Could not close unwanted socket", e);}break;}}}}if (D) Log.i(TAG, "END mAcceptThread");}public void cancel() {if (D) Log.d(TAG, "cancel " + this);try {mmServerSocket.close();} catch (IOException e) {Log.e(TAG, "close() of server failed", e);}}}/*** This thread runs while attempting to make an outgoing connection* with a device. It runs straight through; the connection either* succeeds or fails.*/private class ConnectThread extends Thread {private final BluetoothSocket mmSocket;private final BluetoothDevice mmDevice;public ConnectThread(BluetoothDevice device) {mmDevice = device;BluetoothSocket tmp = null;// Get a BluetoothSocket for a connection with the// given BluetoothDevicetry {tmp = device.createRfcommSocketToServiceRecord(MY_UUID);} catch (IOException e) {Log.e(TAG, "create() failed", e);}mmSocket = tmp;}public void run() {Log.i(TAG, "BEGIN mConnectThread");setName("ConnectThread");// Always cancel discovery because it will slow down a connectionmAdapter.cancelDiscovery();// Make a connection to the BluetoothSockettry {// This is a blocking call and will only return on a// successful connection or an exceptionmmSocket.connect();} catch (IOException e) {connectionFailed();// Close the sockettry {mmSocket.close();} catch (IOException e2) {Log.e(TAG, "unable to close() socket during connection failure", e2);}// Start the service over to restart listening modeBluetoothChatService.this.start();return;}// Reset the ConnectThread because we're donesynchronized (BluetoothChatService.this) {mConnectThread = null;}// Start the connected threadconnected(mmSocket, mmDevice);}public void cancel() {try {mmSocket.close();} catch (IOException e) {Log.e(TAG, "close() of connect socket failed", e);}}}/*** This thread runs during a connection with a remote device.* It handles all incoming and outgoing transmissions.*/private class ConnectedThread extends Thread {private final BluetoothSocket mmSocket;private final InputStream mmInStream;private final OutputStream mmOutStream;public ConnectedThread(BluetoothSocket socket) {Log.d(TAG, "create ConnectedThread");mmSocket = socket;InputStream tmpIn = null;OutputStream tmpOut = null;// Get the BluetoothSocket input and output streamstry {tmpIn = socket.getInputStream();tmpOut = socket.getOutputStream();} catch (IOException e) {Log.e(TAG, "temp sockets not created", e);}mmInStream = tmpIn;mmOutStream = tmpOut;}public void run() {Log.i(TAG, "BEGIN mConnectedThread");byte[] buffer = new byte[1024];byte[] buffer2 = new byte[1024];int bytes;int i;// Keep listening to the InputStream while connectedwhile (true) {try {// Read from the InputStreambytes = mmInStream.read(buffer);if(bytes>0){buffer2=buffer.clone();for(i=0;i<buffer.length;i++)buffer[i]=0;// Send the obtained bytes to the UI ActivitymHandler.obtainMessage(MainActivity.MESSAGE_READ, bytes, -1, buffer2).sendToTarget();}} catch (IOException e) {//Log.e(TAG, "disconnected", e);connectionLost();break;}}}/*** Write to the connected OutStream.* @param buffer  The bytes to write*/public void write(byte[] buffer) {try {mmOutStream.write(buffer);// Share the sent message back to the UI ActivitymHandler.obtainMessage(MainActivity.MESSAGE_WRITE, buffer.length, -1, buffer).sendToTarget();} catch (IOException e) {Log.e(TAG, "Exception during write", e);}}public void cancel() {try {mmSocket.close();} catch (IOException e) {Log.e(TAG, "close() of connect socket failed", e);}}}
}

3、处理获取蓝牙板块响应的数据 

    private final Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case 2:byte[] readBuf = (byte[]) msg.obj;String readMessage = null;rxcount += msg.arg1;rxs += msg.arg1;Display_Data(readBuf,msg.arg1,false);    }}};

格式转换

void Display_Data(byte[] dat,int len,boolean isSend){String msg = "";boolean hex = false;
//        if(isSend){
//            hex =((CheckBox) (findViewById(R.id.txhex))).isChecked();
//        }else hex =((CheckBox) (findViewById(R.id.rxhex))).isChecked();if(hex) {try {msg = getHexString(dat, 0, len);} catch (UnsupportedEncodingException e) {throw new RuntimeException("Unsupported   encoding   type.");}}else {try{msg = new String(dat, 0, len,"GBK");}catch	(UnsupportedEncodingException   e){throw   new   RuntimeException("Unsupported   encoding   type.");}}show_data(msg);//if(isSend)Add_Sended(msg);//else Add_Readed(msg);}

public void show_data(String t){weighStr = t;System.out.println("获取接收称重数据" + weighStr);
}

最后在show_data里拿到的是打印数据

如图所示

 

VID_20241025_180518

完整代码我有时间会上传到仓库

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com