2013-04-01 74 views
0

有人可以解釋下面的處理程序是幹什麼的嗎?以及我們如何使用處理程序?我是新來的Android和Java,所以請多多包涵Android中的藍牙處理程序

這裏是從第一類

private final Handler mHandler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      switch (msg.what) { 
      case MESSAGE_STATE_CHANGE: 
       if(D) Log.i(TAG, "MESSAGE_STATE_CHANGE: " + msg.arg1); 
       switch (msg.arg1) { 
       case BluetoothChatService.STATE_CONNECTED: 
        mTitle.setText(R.string.title_connected_to); 
        mTitle.append(mConnectedDeviceName); 
        mConversationArrayAdapter.clear(); 
        break; 
       case BluetoothChatService.STATE_CONNECTING: 
        mTitle.setText(R.string.title_connecting); 
        break; 
       case BluetoothChatService.STATE_LISTEN: 
       case BluetoothChatService.STATE_NONE: 
        mTitle.setText(R.string.title_not_connected); 
        break; 
       } 
       break; 
      case MESSAGE_WRITE: 
       byte[] writeBuf = (byte[]) msg.obj; 
       // construct a string from the buffer 
       String writeMessage = new String(writeBuf); 
       mConversationArrayAdapter.add("Me: " + writeMessage); 
       break; 
      case MESSAGE_READ: 
       byte[] readBuf = (byte[]) msg.obj; 
       // construct a string from the valid bytes in the buffer 
       String readMessage = new String(readBuf, 0, msg.arg1); 
       mConversationArrayAdapter.add(mConnectedDeviceName+": " + readMessage); 
       break; 
      case MESSAGE_DEVICE_NAME: 
       // save the connected device's name 
       mConnectedDeviceName = msg.getData().getString(DEVICE_NAME); 
       Toast.makeText(getApplicationContext(), "Connected to " 
           + mConnectedDeviceName, Toast.LENGTH_SHORT).show(); 
       break; 
      case MESSAGE_TOAST: 
       Toast.makeText(getApplicationContext(), msg.getData().getString(TOAST), 
           Toast.LENGTH_SHORT).show(); 
       break; 
      } 
     } 
    }; 

這裏的代碼片段是一個從connectThread類的代碼

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

     public ConnectedThread(BluetoothSocket socket, String socketType) { 
      Log.d(TAG, "create ConnectedThread: " + socketType); 
      mmSocket = socket; 
      InputStream tmpIn = null; 
      OutputStream tmpOut = null; 

      // Get the BluetoothSocket input and output streams 
      try { 
       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]; 
      int bytes; 

      // Keep listening to the InputStream while connected 
      while (true) { 
       try { 
        // Read from the InputStream 
        bytes = mmInStream.read(buffer); 

        // Send the obtained bytes to the UI Activity 
        mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, bytes, -1, buffer) 
          .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 Activity 
       mHandler.obtainMessage(BluetoothChat.MESSAGE_WRITE, -1, -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); 
      } 
     } 
    } 
} 

現在請你解釋一下至於如何使用它們。如果有任何好的教程,也可以這樣做

+1

http://developer.android.com/reference/android/os/Handler.html –

+0

https://www.google.com/search?q=android+handler –

回答

2

處理程序基本上是一個消息循環 - 它接收從項目中其他位置發送的傳入消息,並在UI線程上處理它。當您通過藍牙讀取或寫入數據時,該代碼正在向處理程序發送消息。