片段:蓝牙服务和片段连接

我对我的项目进行了调试,我的3.片段无法连接蓝牙服务。 这包括向其他设备发送消息。 我的连接是启动第一个片段我的设备ID和设备名称应该保持蓝牙服务但我连接下面的代码我的连接null和ConnectedThread返回null对象。 那我怎样才能再次在我的片段中连接蓝牙服务java?

我在片段上称这一行

mBluetoothConnection = new BluetoothConnectionService(getActivity().getApplicationContext()); 

并在BluetoothService.java中编写函数:

 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { byte[] bytes = editText.getText().toString().getBytes(Charset.defaultCharset()); mBluetoothConnection.write(bytes); } }) 

我在mBluetoothConnection.write(bytes);上的断点mBluetoothConnection.write(bytes); 这一行和每个ConnectedThread,outputstream都返回null,为什么?

这是我的服务:

 public class BluetoothConnectionService { private static final String TAG = "BluetoothConnectionServ"; private static final String appName = "MYAPP"; private static final UUID MY_UUID_INSECURE = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); private final BluetoothAdapter mBluetoothAdapter; Context mContext; private AcceptThread mInsecureAcceptThread; private ConnectThread mConnectThread; private BluetoothDevice mmDevice; private UUID deviceUUID; ProgressDialog mProgressDialog; private ConnectedThread mConnectedThread; public BluetoothConnectionService(Context context) { mContext = context; mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); start(); } /** * 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 socket private final BluetoothServerSocket mmServerSocket; public AcceptThread(){ BluetoothServerSocket tmp = null; // Create a new listening server socket try{ tmp = mBluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord(appName, MY_UUID_INSECURE); Log.d(TAG, "AcceptThread: Setting up Server using: " + MY_UUID_INSECURE); }catch (IOException e){ Log.e(TAG, "AcceptThread: IOException: " + e.getMessage() ); } mmServerSocket = tmp; } public void run(){ Log.d(TAG, "run: AcceptThread Running."); BluetoothSocket socket = null; try{ // This is a blocking call and will only return on a // successful connection or an exception Log.d(TAG, "run: RFCOM server socket start....."); if(socket == null) socket = mmServerSocket.accept(); Log.d(TAG, "run: RFCOM server socket accepted connection."); }catch (IOException e){ Log.e(TAG, "AcceptThread: IOException: " + e.getMessage() ); } //talk about this is in the 3rd if(socket != null){ Log.d(TAG, "run: Connected is active"); connected(socket,mmDevice); } Log.i(TAG, "END mAcceptThread "); } public void cancel() { Log.d(TAG, "cancel: Canceling AcceptThread."); try { mmServerSocket.close(); } catch (IOException e) { Log.e(TAG, "cancel: Close of AcceptThread ServerSocket failed. " + e.getMessage() ); } } } /** * 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 BluetoothSocket mmSocket; public ConnectThread(BluetoothDevice device, UUID uuid) { Log.d(TAG, "ConnectThread: started."); mmDevice = device; deviceUUID = uuid; } public void run(){ BluetoothSocket tmp = null; Log.i(TAG, "RUN mConnectThread "); // Get a BluetoothSocket for a connection with the // given BluetoothDevice try { Log.d(TAG, "ConnectThread: Trying to create InsecureRfcommSocket using UUID: " +MY_UUID_INSECURE ); tmp = mmDevice.createRfcommSocketToServiceRecord(deviceUUID); } catch (IOException e) { Log.e(TAG, "ConnectThread: Could not create InsecureRfcommSocket " + e.getMessage()); } mmSocket = tmp; // Always cancel discovery because it will slow down a connection mBluetoothAdapter.cancelDiscovery(); // Make a connection to the BluetoothSocket try { // This is a blocking call and will only return on a // successful connection or an exception mmSocket.connect(); Log.d(TAG, "run: ConnectThread connected."); } catch (IOException e) { // Close the socket try { mmSocket.close(); Log.d(TAG, "run: Closed Socket."); } catch (IOException e1) { Log.e(TAG, "mConnectThread: run: Unable to close connection in socket " + e1.getMessage()); } Log.d(TAG, "run: ConnectThread: Could not connect to UUID: " + MY_UUID_INSECURE ); } //will talk about this in the 3rd video connected(mmSocket,mmDevice); } public void cancel() { try { Log.d(TAG, "cancel: Closing Client Socket."); mmSocket.close(); } catch (IOException e) { Log.e(TAG, "cancel: close() of mmSocket in Connectthread failed. " + e.getMessage()); } } } /** * Start the chat service. Specifically start AcceptThread to begin a * session in listening (server) mode. Called by the Activity onResume() */ public synchronized void start() { Log.d(TAG, "start"); // Cancel any thread attempting to make a connection if (mConnectThread != null) { mConnectThread.cancel(); mConnectThread = null; } if (mInsecureAcceptThread == null) { mInsecureAcceptThread = new AcceptThread(); mInsecureAcceptThread.start(); } } /** AcceptThread starts and sits waiting for a connection. Then ConnectThread starts and attempts to make a connection with the other devices AcceptThread. **/ public void startClient(BluetoothDevice device,UUID uuid){ Log.d(TAG, "startClient: Started."); //initprogress dialog mProgressDialog = ProgressDialog.show(mContext,"Connecting Bluetooth" ,"Please Wait...",true); mConnectThread = new ConnectThread(device, uuid); mConnectThread.start(); } /** Finally the ConnectedThread which is responsible for maintaining the BTConnection, Sending the data, and receiving incoming data through input/output streams respectively. **/ private class ConnectedThread extends Thread { private final BluetoothSocket mmSocket; private final InputStream mmInStream; private final OutputStream mmOutStream; public ConnectedThread(BluetoothSocket socket) { Log.d(TAG, "ConnectedThread: Starting."); mmSocket = socket; InputStream tmpIn = null; OutputStream tmpOut = null; //dismiss the progressdialog when connection is established try{ mProgressDialog.dismiss(); }catch (NullPointerException e){ e.printStackTrace(); } try { tmpIn = mmSocket.getInputStream(); tmpOut = mmSocket.getOutputStream(); } catch (IOException e) { e.printStackTrace(); } mmInStream = tmpIn; mmOutStream = tmpOut; } public void run(){ byte[] buffer = new byte[1024]; // buffer store for the stream int bytes; // bytes returned from read() // Keep listening to the InputStream until an exception occurs while (true) { // Read from the InputStream try { bytes = mmInStream.read(buffer); String incomingMessage = new String(buffer, 0, bytes); Log.d(TAG, "InputStream: " + incomingMessage); Intent incomingMessageIntent = new Intent("incomingMessage"); incomingMessageIntent.putExtra("theMessage", incomingMessage); LocalBroadcastManager.getInstance(mContext).sendBroadcast(incomingMessageIntent); } catch (IOException e) { Log.e(TAG, "write: Error reading Input Stream. " + e.getMessage() ); break; } } } //Call this from the main activity to send data to the remote device public void write(byte[] bytes) { String text = new String(bytes, Charset.defaultCharset()); Log.d(TAG, "write: Writing to outputstream: " + text); try { mmOutStream.write(bytes); } catch (IOException e) { Log.e(TAG, "write: Error writing to output stream. " + e.getMessage() ); } } /* Call this from the main activity to shutdown the connection */ public void cancel() { try { mmSocket.close(); } catch (IOException e) { } } } private void connected(BluetoothSocket mmSocket, BluetoothDevice mmDevice) { Log.d(TAG, "connected: Starting."); // Start the thread to manage the connection and perform transmissions mConnectedThread = new ConnectedThread(mmSocket); mConnectedThread.start(); } /** * 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 object ConnectedThread r; if(mConnectedThread==null){ return; } // Synchronize a copy of the ConnectedThread Log.d(TAG, "write: Write Called."); //perform the write mConnectedThread.write(out); } } 

;