2012-03-26 5 views
1

Helo.android - 블루투스 : 입력 스트림에서 프로그램이 멈 춥니 다

블루투스를 통해 데이터를 이전하는 애플리케이션을 개발 중입니다 (비행 기록 장치 사용). 필자가 많은 데이터 데이터 (3000 - 40000 줄의 텍스트, 파일 크기에 따라 다름)를 수신 할 때 필자의 애플리케이션은 데이터 수신을 멈추는 것처럼 보입니다. InputStream.read (buffer)를 사용하여 데이터를 수신합니다. 예를 들면 : 나는 비행 기록 장치에 명령을 보내고, 파일을 (줄 단위로) 보내기 시작하고, 내 전화기에는 120 줄을 수신 한 다음 응용 프로그램이 멈 춥니 다.

Intresting은 내 HTC Desire에서 앱이 가끔 붙어서 Samsung Galaxy S 휴대 전화에 응용 프로그램이 매 50 회 이상 수신하려고 시도 할 때마다 멈 춥니 다.

코드는 BluetoothChat 예를 기반으로합니다. 이것은 내가 BluetoothSocket을 듣고 있어요 코드의 일부입니다

byte[] buffer = new byte[1024]; 
int bytes =0; 

while(true) 
{ 
    bytes = mmInStream.read(buffer); 
    readMessage = new String(buffer, 0, bytes); 
    Log.e("read", readMessage); 

    String read2 = readMessage; 
    //searching for the end of line to count the lines(the star means the start of the checksum) 
    int currentHits = read2.replaceAll("[^*]","").length(); 
    nmbrOfTransferedFligts += currentHits; 
    . 
    . 
    . 
    //parsing and saving the recieved data   

내가 스레드에, 그는 안드로이드 서비스에서 구현, 동안 (사실) 루프에서이 작업을 실행하고 있다고한다. 응용 프로그램이 "bytes = mmInStream.read (buffer);"에서 멈춘 것처럼 보입니다. 이 작업을 BufferedReader로 시도했지만 성공하지 못했습니다.

감사합니다.

답변

2

앱이 "bytes = mmInStream.read (buffer);"에서 멈춘 것처럼 보입니다.

정상적인 동작입니다. 더 이상 사용할 수있는 데이터가 없을 때 InputStream.read (byte [])가 차단됩니다.

이 문제는 상대방 또는 장치 간의 통신에 있음을 나에게 암시합니다. 더 많은 데이터를 수신하지 못하게하는 통신 문제 (Galaxy vs. the Desire에서 조금 다릅니다)가 가능합니까?

또한 read 문을 try/catch하여 가능한 IOException을 잡을 것을 제안합니다. 비록 그것이 일어나고 있었다면 당신은 logcat에서 그것을 보았을 것입니다.

logcat에 대해 말하면, Android가 생성 한 logcat 문을 살펴 보는 것이 좋습니다. 나는 그것이 블루투스에 많은 것을 만들어내는 것을 발견했다. 그리고 이것은 당신이 정말로 더 많은 데이터를 읽을 수 있는지를 알아 내는데 도움이 될 것이다.

+0

답변 해 주셔서 감사합니다. 나는 귀하의 조언을 시도했습니다. 'bytes = mmInStream.read (buffer);'행은 예외를 발생시키지 않습니다. 그러나 내 장치는 계속 내 전화 (100 %)로 데이터를 전송합니다. BluetoothSocket이 올바르게 작동하지 않는 것으로 보입니까? 감사합니다. – Primoz990

+0

예, BluetoothSocket이 올바르게 작동하지 않는 것 같습니다. HTC와 삼성 기기에서 모두 문제가 발생 했으므로 공급 업체 특정 버그가 아닙니다. 아마도 Android 문제 목록을보고이 문제를 설명 할 수있는 문제가 있는지 확인하십시오. 내가 생각할 수있는 유일한 다른 방법은 시스템에서 logcat 출력을 보는 것입니다. 내 전화기 BlueZ (리눅스/안드로이드 블루투스 스택)는 많은 디버그 문을 logcat에 저장합니다. – Tom

관련 문제