场景是这样的.我已经将我的应用程序连接到设备但是当活动销毁时,连接也断开了.是的,我知道当活动破坏活动中的所有任务都会受到影响.
该设备拥有自己的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 – 将蓝牙连接实施到服务或应用程序类,而不会失去与设备的连接所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)