2014-03-27 63 views
0

我試圖通過RFCOMM以免費獲贈字符串中的Android接收字符串的Android

我是新手到Android,請您幫我 我可以發送數據 但接收失敗

這裏我的代碼

請幫我

package com.example.btspp; 

import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.util.Scanner; 
import java.util.UUID; 
import java.util.regex.Pattern; 

import android.app.Activity; 
import android.bluetooth.BluetoothAdapter; 
import android.bluetooth.BluetoothDevice; 
import android.bluetooth.BluetoothSocket; 
import android.os.Bundle; 
import android.os.Handler; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

public class Buttons extends Activity { 

private BluetoothAdapter btAdaptor; 
private BluetoothSocket btSocket = null; 
private OutputStream outStream = null; 
private InputStream inStream = null; 
private static final UUID MY_UUID = UUID 
     .fromString("00001101-0000-1000-8000-00805F9B34FB"); 

Thread workerThread; 
byte[] readBuffer; 
int readBufferPosition; 
int counter; 
volatile boolean stopWorker; 

public String addressToConnect; 
public static StringBuilder readStr; 

TextView tv; 
int aa; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_buttons); 
    tv = (TextView) findViewById(R.id.textView1); 
    addressToConnect = getIntent().getStringExtra("addressToConnect"); 

    connectToDevice(addressToConnect); 

    Button btn = (Button) findViewById(R.id.button1); 


    btn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      sendData("H");   

      // Toast.makeText(getBaseContext(), addressToConnect, 
      // Toast.LENGTH_SHORT).show(); 
     } 
    }); 



} 





private void sendData(String message) { 
    byte[] msgBuffer = message.getBytes(); 
    try { 
     // final BT bt = new BT(); 
     outStream.write(msgBuffer); 
     //readData(); 
    } catch (Exception e) { 
     // TODO: handle exception 

     Toast.makeText(getApplicationContext(), 
       "Not Sent BT Data : " + e.getMessage(), Toast.LENGTH_SHORT) 
       .show(); 
    } 
} 


/*private void readData(){ 
    String instring = ""; 
    try { 
     inStream = btSocket.getInputStream(); 
    } catch (Exception e) { 
     // TODO: handle exception 
    } 

    Scanner scan = new Scanner(new InputStreamReader(inStream)); 
    scan.useDelimiter(Pattern.compile("[\\r\\n]+")); 
    instring = scan.next(); 
    scan = null; 
    Toast.makeText(getApplicationContext(), 
      "Got Data : " + instring, Toast.LENGTH_SHORT) 
      .show(); 
    //return instring; 

}*/ 
void beginListenForData() 
{ 
    final Handler handler = new Handler(); 
    final byte delimiter = 10; //This is the ASCII code for a newline character 

    stopWorker = false; 
    readBufferPosition = 0; 
    readBuffer = new byte[1024]; 
    workerThread = new Thread(new Runnable() 
    { 
     public void run() 
     {     
      while(!Thread.currentThread().isInterrupted() && !stopWorker) 
      { 
       try 
       { 
        int bytesAvailable = inStream.available();       
        if(bytesAvailable > 0) 
        { 
         byte[] packetBytes = new byte[bytesAvailable]; 
         inStream.read(packetBytes); 
         for(int i=0;i<bytesAvailable;i++) 
         { 
          byte b = packetBytes[i]; 
          if(b == delimiter) 
          { 
           byte[] encodedBytes = new byte[readBufferPosition]; 
           System.arraycopy(readBuffer, 0, encodedBytes, 0, encodedBytes.length); 
           final String data = new String(encodedBytes, "US-ASCII"); 
           readBufferPosition = 0; 

           handler.post(new Runnable() 
           { 
            public void run() 
            { 
             tv.setText(data); 
            } 
           }); 
          } 
          else 
          { 
           readBuffer[readBufferPosition++] = b; 
          } 
         } 
        } 
       } 
       catch (IOException ex) 
       { 
        stopWorker = true; 
       } 
      } 
     } 
    }); 

    workerThread.start(); 
} 

private void connectToDevice(String address) { 
    btAdaptor = BluetoothAdapter.getDefaultAdapter(); 
    BluetoothDevice device = btAdaptor.getRemoteDevice(address); 
    try { 
     btSocket = device.createRfcommSocketToServiceRecord(MY_UUID); 
     btSocket.connect(); 
     outStream = btSocket.getOutputStream(); 
     inStream = btSocket.getInputStream(); 
     beginListenForData(); 
     tv.setText("Bluetooth Opened"); 
     //listenForMessages(btSocket, readStr); 
     // beginListenForData(); 

    } catch (IOException e) { 
     // errorExit("Fatal Error", 
     // "In onResume() and socket create failed: " + e.getMessage() + 
     // "."); 
     Toast.makeText(getApplicationContext(), 
       "Not Connected : " + e.getMessage(), Toast.LENGTH_SHORT) 
       .show(); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_buttons, menu); 
    return true; 
} 

} 

我是新手到Android,請您幫我 我可以發送數據 但接收失敗

這裏是我的代碼

請幫我

+0

在日誌中是否有任何錯誤或者它只是不工作? – Huxley

+0

沒有任何錯誤 它只是不工作 當我按下發送 它發送字母「H」成功推向PC 的藍牙串行端口但是當我在它 上鍵入的東西它不會在TextView的 – Buddhika

+1

顯示可能有由於您只停止接收線程而不處理任何事件,因此您可能要檢查線程是否停止運行,如果您嘗試從PC發送數據並打印堆棧跟蹤 – Huxley

回答

-1

是不是13「\ r」通常的分隔符,而不是10?

+0

這種類型的帖子應放置在評論部分 – Razib

+0

感謝您的回覆 我會試試這個 – Buddhika