2013-12-17 5 views
2

나는 그것을 할 관리 여기안드로이드 읽기의 USB 비동기

https://github.com/mik3y/usb-serial-for-android

다운로드 라이브러리를 사용하여 비동기 적으로 안드로이드 장치에 아두 이노에서 문자열을 읽기 위해 노력하고있어,하지만 코드는 한 번만이 아니라 작동 루프 사이클에서. asyncTask에서 작업을 시도했지만 프로그램이 충돌하여 루프에서 실행 가능한 runnable을 실행하여 사이클을 처리했지만 실행 가능 프로그램이 실행될 때마다 프로그램이 멈추고 실행 가능 프로그램이 종료 될 때 프로그램이 중단됩니다. .

@Override 
protected void onCreate(Bundle savedInstanceState) { 
try 
{ 
UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); 
    driver = UsbSerialProber.acquire(manager); 
    if (driver != null) { 

      driver.open(); 
      driver.setBaudRate(9600); 
      handler.postDelayed(runnable, 1); 
     } 
} 
catch(Exception ex){//do nothing} 
} 



private Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 
      try { 
       buffer = new byte[3000]; 
       numBytesRead = driver.read(buffer, 3000); 
       String str = new String(buffer, "UTF-8"); 
       buffer = null; 
       numBytesRead = 0; 
      handler.postDelayed(this, 1); //here is where the runnable is executed again. This generates the loop 
       } 
     catch (IOException e) {//do nothing}  
     } 
    }; 

당신이 도움이 될 수 있습니다 희망 :

try 
{ 
    UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); 
    driver = UsbSerialProber.acquire(manager); 
    if (driver != null) { 

      driver.open(); 
      driver.setBaudRate(9600); 
      new Thread(runnable).start(); 
      buffer = new byte[3000]; 
        numBytesRead = driver.read(buffer, 3000); 
       String str = new String(buffer, "UTF-8"); 
       buffer = null; 
       numBytesRead = 0; 
     } 
} 
catch(Exception ex){//do nothing} 

내가 실행 가능한 실행하려면이 방법을 구조화 :

이는 USB에서 읽는 데 사용되는 코드입니다!

답변

1

해결!

제가

handler.postDelayed(runnable, 0); 
handler.postDelayed(this, 0); 

handler.postDelayed(runnable, 1); 

handler.postDelayed(this, 1); 

상기 파라미터 (1) 변화도 나 버퍼 사이즈 여기 변경했습니다

buffer = new byte[3000]; 
numBytesRead = driver.read(buffer, 3000); 

3000에서 40까지, 그 이유는 프로그램이 너무 느린 이유입니다.

고맙습니다.