2016-05-09 10 views
0

Ich schreibe gerade eine App, die 2 gekoppelte Geräte verbindet und ermöglicht es ihnen, Daten zu senden. Ich bin sehr neu in der Android-Entwicklung und habe einige Probleme, ich kann nicht scheinen, dass die Datenübertragung funktioniert.Android Studio Lesen und Schreiben von Daten über Bluetooth

Ich verfolge dieses Tutorial: http://developer.android.com/guide/topics/connectivity/bluetooth.html

Hier einige meiner Code:

-Der Schaltfläche "Senden", bedeutete eine Schnur über

btnSendData.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String message = editTxtMsg.getText().toString(); 

      if (connectedThread != null) { 
       connectedThread.write(message.getBytes()); 
      } 
     } 
    }); 

-Der ConnectedThread

senden
private class ConnectedThread extends Thread { 
    private final BluetoothSocket mmSocket; 
    private final InputStream mmInStream; 
    private final OutputStream mmOutStream; 

    public ConnectedThread(BluetoothSocket socket) { 
     mmSocket = socket; 
     InputStream tmpIn = null; 
     OutputStream tmpOut = null; 

     // Get the input and output streams, using temp objects because 
     // member streams are final 
     try { 
      tmpIn = socket.getInputStream(); 
      tmpOut = socket.getOutputStream(); 
     } catch (IOException e) { } 

     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) { 
      try { 
       // Read from the InputStream 
       bytes = mmInStream.read(buffer); 
       // Send the obtained bytes to the UI activity 
       mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer).sendToTarget(); 

       /*Bundle data =new Bundle(); 
       //data.p 
       Message m =mHandler.obtainMessage(); 

       m.setData(data); 
       mHandler.sendMessage(m);*/ 

      } catch (IOException e) { 
       break; 
      } 
     } 
    } 

    /* Call this from the main activity to send data to the remote device */ 
    public void write(byte[] bytes) { 
     try { 
      mmOutStream.write(bytes); 

      mHandler.obtainMessage(MESSAGE_WRITE, -1, -1, buffer).sendToTarget(); 
     } catch (IOException e) { } 
    } 

    /* Call this from the main activity to shutdown the connection */ 
    public void cancel() { 
     try { 
      mmSocket.close(); 
     } catch (IOException e) { } 
    } 
} 

-Der Handler

private final Handler mHandler = new Handler() 
{ 
    @Override 
    public void handleMessage(Message msg) 
    { 
     switch (msg.what) 
     { 
      case MESSAGE_READ: 
       byte[] readBuffer = (byte[]) msg.obj; 
       String readMessage = new String(readBuffer, 0, msg.arg1); 
       //arrayAdapterMsg.add(btDevice.getName() + ": " + readMessage); 
       aryLstMsg.add(btDevice.getName() + ": " + readMessage); 

       arrayAdapterMsg.notifyDataSetChanged(); 

       break; 

      case MESSAGE_WRITE: 
       byte[] writeBuffer = (byte[]) msg.obj; 
       String writeMessage = new String(writeBuffer); 
       //arrayAdapterMsg.add("Me: " + "test"); 
       aryLstMsg.add("Me: " + writeMessage); 

       arrayAdapterMsg.notifyDataSetChanged(); 

       break; 
     } 
    } 
}; 

Ich weiß nicht, warum es nicht funktioniert, hat sonst jemand irgendwelche Ideen?

Antwort

0

Prüfung bluetooth Erlaubnis sollte es sein

<uses-permission android:name="android.permission.BLUETOOTH" /> 


<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> 
0

Sie versuchen Puffer für den Zugriff auf von write() Funktion, aber es ist im Inneren Lauf() definiert. Versuchen Sie, es global zu definieren, oder rufen Sie write() von run auf, indem Sie geeignete Parameter übergeben.

Verwandte Themen