2015-02-01 1 views
0

Android 응용 프로그램과 함께 휴대 전화의 GSM 모듈에 AT 명령을 보내려고합니다. 그러나 결과를 다시 읽을 때 cat 명령이 아무 것도 읽지 않기 때문에 응답을 얻지 못하는 것 같습니다.Android - AT 명령을 사용하여 내장 GSM 모듈과 통신합니다.

내 코드 : 출력의

Process p = null; 
    for(int i = 0; i < 100; i++) { 
     try { 
      Log.i("APP","reading"); 
      p = Runtime.getRuntime().exec("su"); 
      DataOutputStream os = new DataOutputStream(p.getOutputStream()); 
      InputStream is = p.getInputStream(); 
      int len = 0; 
      int tries = 10; 
      byte[] buff = new byte[4096]; 
      StringBuilder sb = new StringBuilder(); 
      os.writeBytes("pkill -9 -f cat\necho -e \"ATI\\r\" > dev/smd0 && cat dev/smd0\n"); 
      while (is.available() <= 0 && tries > 0) { 
       try { 
        Log.e("APP","unsuccessful"); 
        Thread.sleep(500); 
        tries--; 
       } catch (Exception ex) { 
       } 
      } 
      while (tries > 0 && is.available() > 0) { 
       len = is.read(buff); 
       if (len <= 0) break; 
       String seg = new String(buff, 0, len); 
       Log.i("APP", seg); 
       sb.append(seg); 
      } 
      os.writeBytes("exit\n"); 
      os.flush(); 
      os.close(); 
      is.close(); 
      p.getErrorStream().close(); 
      Toast.makeText(this, sb.toString(), Toast.LENGTH_LONG).show(); 
      Thread.sleep(2000); 
     } catch (IOException e) { 
      throw new RuntimeException(e); 
     } catch (InterruptedException e) 
     { 
      throw new RuntimeException(e); 
     } 
    } 

예 :

http://pastebin.com/y7T2cGpL

답변

0

열기 및 명령을 전송하고 같은 응답이 골칫거리 수 있습니다 읽기 사이에서 모뎀 장치를 폐쇄. 명령 줄에서 AT 명령 통신을 수행하도록 설계된 프로그램 인 atinout을 대신 사용해보십시오 (실행 중에 모뎀 장치를 한 번만 열 수 있음).

그런 다음 당신은 당신이 일반 \n 라인 엔딩으로 (예를 들어, ATI를) 실행하려는 명령을 포함하는 파일 input.txt 만들기

  • 에 코드를 변경합니다.
  • 실행 atinout inout.txt /dev/smd0 output.txt
  • output.txt 파일을 읽으십시오.

불행히도 안드로이드에 대한 atinout을 컴파일하는 것은 내가 직접 해보았지만 어떤 도움을 줄 수는 없지만 다른 사람들이 그것을 참조하는 것을 보았습니다.


마찬가지로 cat을 죽이는 것은 약간 위험합니다. 동시에 실행되는 다른 스크립트에 의해 시작된 고양이 인스턴스를 죽일 위험이 있습니다 ...

관련 문제