2012-12-04 2 views
0

Android 앱에서 블루투스를 통해 액셀러레이터 값을 PC로 보내려고합니다. BluetoothChat 데모 응용 프로그램에서 작업 중입니다. Android App에는 가속이 변경 될 때마다 호출되는 onSensorChanged라는 메소드가 있습니다. 이하의 방법에자바의 inputStream에서 각 문자열을 읽는 방법

 public void writeString(String out) { 
     try { 
       if(D) Log.d(TAG, "Sending File....AS STRING"); 
       mmOutStream.write(out.getBytes(), 0, out.getBytes().length); 

     } catch (IOException e) { 
      Log.e(TAG, "Exception during write", e); 
     } 
    } 

I은 ​​PC 측에서 InputStream에서 공정 :

@Override 
public void onSensorChanged(SensorEvent e) { 
    // the work done when the accelerometer data changes 
    try { 
     Thread.sleep(25); 
    } catch (InterruptedException e1) { 
     e1.printStackTrace(); 
    } 
    sensorX = e.values[0]; 
    sensorY = e.values[1]; 

    Toast.makeText(BluetoothChat.this, "x coordinate = " + sensorX + "y coordinate = " + sensorY Toast.LENGTH_SHORT).show(); 

    BigDecimal sensorXDec = new BigDecimal(e.values[0]).setScale(2,BigDecimal.ROUND_HALF_UP); 
    BigDecimal sensorYDec = new BigDecimal(e.values[1]).setScale(2,BigDecimal.ROUND_HALF_UP); 


    String vals = String.valueOf(sensorXDec.toPlainString() + "," + sensorYDec.toPlainString()); 

    mChatService.writeFromString(vals); 

} 

메소드 writeFromString

public void writeFromString(String temp){ 
    // Create temporary object 
    ConnectedThread r; 
    // Synchronize a copy of the ConnectedThread 
    synchronized (this) { 
     if (mState != STATE_CONNECTED) return; 
     r = mConnectedThread; 
    } 
    // Perform the write unsynchronized 
    r.writeString(temp); 
} 

및 writeString 방법은 다음과 같다 : 상기 방법은 다음과 같다

@Override 
public void run() { 
    try { 
     // prepare to receive data 
     InputStream inputStream = mConnection.openInputStream(); 

     System.out.println("waiting for input"); 

     while (true) { 
      int command = inputStream.read(); 

      if (command == EXIT_CMD) 
      { 
       System.out.println("finish process"); 
       break; 
      } 
      processCommand(command); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

질문은 다음과 같습니다. Android 앱에서 보내는 각 문자열 세트를 검색하려면 어떻게합니까?

+1

확인 (InputStream을 String으로 읽거나 변환) : http://stackoverflow.com/questions/309424/read-convert-an-inputstream-to-a-string –

답변

1

시도해보십시오.

String msg = null;
BufferedReader br = new BufferedReader ( new InputStreamReader (inputStream) );

msg = br.readLine();

이이 문제

+0

안녕하세요, Mohammod, 정확히 제가 무엇입니까? 필요합니다. 변경해야 할 유일한 것은 onSensorChanged 메서드였습니다. 끝에 다음을 추가해야했습니다. mChatService.writeFromString ("\ n"); 이 방법은 내가 각 라인을 제대로 읽을 수 있습니다. 그렇지 않으면 입력 스트림은 vals 문자열의 거대한 큰 라인이었습니다. 정말 고마워. 그것은 예상대로 작동합니다 – bboydflo

1
Scanner scanner = new Scanner (inputStream); 

while(true){ 
    if(!scanner.hasNextInt()){ 
     continue; 
    } 
    // at this point we've got an int, so get it and use it 
    try{ 
     int commmand = scanner.nextInt(); 

     if (command == EXIT_CMD){ 
      System.out.println("finish process"); 
      break; 
     } 

     processCommand(command); 
    } catch (Exception catchThem){ 
     // Deal with the caught exceptions 
    } 
} 

내가 이것을 테스트하지 않았다 해결할 수는 당신을 위해 작동 바랍니다.

+0

IGwe, 이해하기는 정말 쉽지만 실제로 문자열을 얻으려고 노력하고 있습니다. 스캐너 메서드를 검사하고 hasNextString이 누락되었습니다. 어떠한 제안 ? 답장을 보내 주셔서 감사합니다 – bboydflo

관련 문제