android – 将蓝牙连接实施到服务或应用程序类,而不会失去与设备的连接

android – 将蓝牙连接实施到服务或应用程序类,而不会失去与设备的连接,第1张

概述我需要一些帮助,你能解释一下我如何实现从我的应用程序到我的迷你热敏打印机设备的蓝牙连接. 场景是这样的.我已经将我的应用程序连接到设备但是当活动销毁时,连接也断开了.是的,我知道当活动破坏活动中的所有任务都会受到影响. 该设备拥有自己的SDK.那就是我现在正在使用的东西. 这就是为什么,我真的需要你的帮助来解决这个问题. 有一些关于此的文档,但对我来说并不是很清楚. 如果你有一个示例项目,我可以用 我需要一些帮助,你能解释一下我如何实现从我的应用程序到我的迷你热敏打印机设备的蓝牙连接.

场景是这样的.我已经将我的应用程序连接到设备但是当活动销毁时,连接也断开了.是的,我知道当活动破坏活动中的所有任务都会受到影响.
该设备拥有自己的SDK.那就是我现在正在使用的东西.

这就是为什么,我真的需要你的帮助来解决这个问题.
有一些关于此的文档,但对我来说并不是很清楚.

如果你有一个示例项目,我可以用它作为指南.我将不胜感激.

对不起英语语法.

请帮帮我.提前致谢 :)

@R_404_6120@ 您可以将所有蓝牙连接代码移动到服务类中.

考虑将其用作路线图.

public class BluetoothDataService extends Service {    final int handlerState = 0;                        //used to IDentify handler message    Handler bluetoothIn;    private BluetoothAdapter btAdapter = null;   private ConnectingThread mConnectingThread;    private ConnectedThread mConnectedThread;    private boolean stopThread;    // SPP UUID service - this should work for most devices    private static final UUID BTMODulEUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");    // String for MAC address    private static final String MAC_ADDRESS = "YOUR:MAC:ADDRESS:HERE";   private StringBuilder recdataString = new StringBuilder();    @OverrIDe    public voID onCreate() {        super.onCreate();        Log.d("BT SERVICE","SERVICE CREATED");        stopThread = false;    }    @OverrIDe    public int onStartCommand(Intent intent,int flags,int startID) {        Log.d("BT SERVICE","SERVICE STARTED");        bluetoothIn = new Handler() {            public voID handleMessage(androID.os.Message msg) {                Log.d("DEBUG","handleMessage");                if (msg.what == handlerState) {                                     //if message is what we want                    String readMessage = (String) msg.obj;                                                                // msg.arg1 = bytes from connect thread                    recdataString.append(readMessage);`enter code here`                    Log.d("RECORDED",recdataString.toString());                    // Do stuff here with your data,like adding it to the database                         }                        recdataString.delete(0,recdataString.length());                    //clear all string data                    }                }            }        };        btAdapter = BluetoothAdapter.getDefaultAdapter();       // get Bluetooth adapter        checkBTState();        return super.onStartCommand(intent,flags,startID);    }    @OverrIDe    public voID onDestroy() {        super.onDestroy();        bluetoothIn.removeCallbacksAndMessages(null);        stopThread = true;        if (mConnectedThread != null) {            mConnectedThread.closeStreams();        }        if (mConnectingThread != null) {            mConnectingThread.closeSocket();        }        Log.d("SERVICE","onDestroy");    }    @Nullable    @OverrIDe    public IBinder onBind(Intent intent) {        return null;    }    //Checks that the AndroID device Bluetooth is available and prompts to be turned on if off    private voID checkBTState() {        if (btAdapter == null) {            Log.d("BT SERVICE","BLUetoOTH NOT SUPPORTED BY DEVICE,StopPing SERVICE");            stopSelf();        } else {            if (btAdapter.isEnabled()) {                Log.d("DEBUG BT","BT ENABLED! BT ADDRESS : " + btAdapter.getAddress() + ",BT name : " + btAdapter.getname());                try {                    BluetoothDevice device = btAdapter.getRemoteDevice(MAC_ADDRESS);                    Log.d("DEBUG BT","ATTEMPTING TO CONNECT TO REMOTE DEVICE : " + MAC_ADDRESS);                    mConnectingThread = new ConnectingThread(device);                    mConnectingThread.start();                } catch (IllegalArgumentException e) {                    Log.d("DEBUG BT","PROBLEM WITH MAC ADDRESS : " + e.toString());                    Log.d("BT SEVICE","ILLEgal MAC ADDRESS,StopPing SERVICE");                    stopSelf();                }            } else {                Log.d("BT SERVICE","BLUetoOTH NOT ON,StopPing SERVICE");                stopSelf();            }        }    }    // New Class for Connecting Thread    private class ConnectingThread extends Thread {        private final BluetoothSocket mmSocket;        private final BluetoothDevice mmDevice;        public ConnectingThread(BluetoothDevice device) {            Log.d("DEBUG BT","IN CONNECTING THREAD");            mmDevice = device;            BluetoothSocket temp = null;            Log.d("DEBUG BT","MAC ADDRESS : " + MAC_ADDRESS);            Log.d("DEBUG BT","BT UUID : " + BTMODulEUUID);            try {                temp = mmDevice.createRfcommSocketToServiceRecord(BTMODulEUUID);                Log.d("DEBUG BT","SOCKET CREATED : " + temp.toString());            } catch (IOException e) {                Log.d("DEBUG BT","SOCKET CREATION Failed :" + e.toString());                Log.d("BT SERVICE","SOCKET CREATION Failed,StopPing SERVICE");                stopSelf();            }            mmSocket = temp;        }        @OverrIDe        public voID run() {            super.run();            Log.d("DEBUG BT","IN CONNECTING THREAD RUN");            // Establish the Bluetooth socket connection.            // Cancelling discovery as it may slow down connection            btAdapter.canceldiscovery();            try {                mmSocket.connect();                Log.d("DEBUG BT","BT SOCKET CONNECTED");                mConnectedThread = new ConnectedThread(mmSocket);                mConnectedThread.start();                Log.d("DEBUG BT","CONNECTED THREAD STARTED");                //I send a character when resuming.beginning transmission to check device is connected                //If it is not an exception will be thrown in the write method and finish() will be called                mConnectedThread.write("x");            } catch (IOException e) {                try {                    Log.d("DEBUG BT","SOCKET CONNECTION Failed : " + e.toString());                    Log.d("BT SERVICE","SOCKET CONNECTION Failed,StopPing SERVICE");                    mmSocket.close();                    stopSelf();                } catch (IOException e2) {                    Log.d("DEBUG BT","SOCKET CLOSING Failed :" + e2.toString());                    Log.d("BT SERVICE","SOCKET CLOSING Failed,StopPing SERVICE");                    stopSelf();                    //insert code to deal with this                }            } catch (IllegalStateException e) {                Log.d("DEBUG BT","CONNECTED THREAD START Failed : " + e.toString());                Log.d("BT SERVICE","CONNECTED THREAD START Failed,StopPing SERVICE");                stopSelf();            }        }        public voID closeSocket() {            try {                //Don't leave Bluetooth sockets open when leaving activity                mmSocket.close();            } catch (IOException e2) {                //insert code to deal with this                Log.d("DEBUG BT",e2.toString());                Log.d("BT SERVICE",StopPing SERVICE");                stopSelf();            }        }    }    // New Class for Connected Thread    private class ConnectedThread extends Thread {        private final inputStream mmInStream;        private final OutputStream mmOutStream;        //creation of the connect thread        public ConnectedThread(BluetoothSocket socket) {            Log.d("DEBUG BT","IN CONNECTED THREAD");            inputStream tmpIn = null;            OutputStream tmpOut = null;            try {                //Create I/O streams for connection                tmpIn = socket.getinputStream();                tmpOut = socket.getoutputStream();            } catch (IOException e) {                Log.d("DEBUG BT",e.toString());                Log.d("BT SERVICE","UNABLE TO READ/WRITE,StopPing SERVICE");                stopSelf();            }            mmInStream = tmpIn;            mmOutStream = tmpOut;        }        public voID run() {            Log.d("DEBUG BT","IN CONNECTED THREAD RUN");            byte[] buffer = new byte[256];            int bytes;            // Keep looPing to Listen for received messages            while (true && !stopThread) {                try {                    bytes = mmInStream.read(buffer);            //read bytes from input buffer                    String readMessage = new String(buffer,bytes);                    Log.d("DEBUG BT PART","CONNECTED THREAD " + readMessage);                    // Send the obtained bytes to the UI Activity via handler                    bluetoothIn.obtainMessage(handlerState,bytes,-1,readMessage).sendToTarget();                } catch (IOException e) {                    Log.d("DEBUG BT",e.toString());                    Log.d("BT SERVICE",StopPing SERVICE");                    stopSelf();                    break;                }            }        }        //write method        public voID write(String input) {            byte[] msgBuffer = input.getBytes();           //converts entered String into bytes            try {                mmOutStream.write(msgBuffer);                //write bytes over BT connection via outstream            } catch (IOException e) {                //if you cannot write,close the application                Log.d("DEBUG BT","UNABLE TO READ/WRITE " + e.toString());                Log.d("BT SERVICE",StopPing SERVICE");                stopSelf();            }        }        public voID closeStreams() {            try {                //Don't leave Bluetooth sockets open when leaving activity                mmInStream.close();                mmOutStream.close();            } catch (IOException e2) {                //insert code to deal with this                Log.d("DEBUG BT","STREAM CLOSING Failed,StopPing SERVICE");                stopSelf();            }        }    }}

这是要消化的大量代码,需要了解具有蓝牙连接的线程和处理程序等内容.

不确定您的专业知识,因此有一些注释可以帮助您学习代码和日志消息,这将有助于您了解代码流.

还要确保在Manifest文件AndroIDManifest.xml中声明此服务

<service androID:name=".BluetoothDataService"/>

您需要熟悉的一些主题

http://developer.android.com/guide/topics/connectivity/bluetooth.html

http://developer.android.com/reference/android/app/Service.html

http://developer.android.com/reference/java/lang/Thread.html

@L_419_3@

总结

以上是内存溢出为你收集整理的android – 将蓝牙连接实施到服务或应用程序类,而不会失去与设备的连接全部内容,希望文章能够帮你解决android – 将蓝牙连接实施到服务或应用程序类,而不会失去与设备的连接所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1122423.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存