2014-04-26 7 views
2

나는 초보자입니다 stackoverflow 그래서 나는 코멘트를 추가 할 수 없습니다. 루팅 된 안드로이드에 명령을 구현하고 결과를 얻을

나는이 페이지를 보았다
Read command output inside su process

를 나는이 대답을 시도하고 괜찮 :

Process p = Runtime.getRuntime().exec(new String[]{"su", "-c", "system/bin/sh"}); 
DataOutputStream stdin = new DataOutputStream(p.getOutputStream()); 
//from here all commands are executed with su permissions 
stdin.writeBytes("ls /data\n"); // \n executes the command 
InputStream stdout = p.getInputStream(); 
byte[] buffer = new byte[BUFF_LEN]; 
int read; 
String out = new String(); 
//read method will wait forever if there is nothing in the stream 
//so we need to read it in another way than while((read=stdout.read(buffer))>0) 
while(true){ 
    read = stdout.read(buffer); 
    out += new String(buffer, 0, read); 
    if(read<BUFF_LEN){ 
     //we have read everything 
     break; 
     } 
} 
//do something with the output 

하지만 쉘의 명령에 시도 할 때 응답은 같은 명령이었다.

내가이 명령을 넣어 :

stdin.writeBytes("echo AT+CQI?\n"); 

대답했다 :

AT+CQI? 

내가 쓴 : 대답은

stdin.writeBytes("echo ATinkd\n"); 

이었다

ATinkd 
,

이것은 "bla..bla..bla .."의 의미입니다. 즉 안드로이드 시스템이이 명령을 명령으로 인식하지 못한다는 뜻입니다.

신체에 조언이나 해결책이 있는지 궁금합니다.

+0

[V.250] (http://www.itu.int/rec/T-REC-V.250-200307-I/en)은 AT 명령 줄에'\ r' 및 '\ n'이 아닙니다. – hlovdal

답변

3

처음에는 AT 명령을 셸에서 stdout으로 보내는 것으로 생각합니다.이 명령은 사용자가 다시 읽는 메아리를 제공하는 것 외에는 아무 것도하지 않습니다. 이 방법을 사용하려면 echo 명령을 직렬 포트 장치 파일로 리디렉션해야합니다. Android 휴대 전화는 다양한 기기를 사용하여 /dev/ttyGS0/dev/smd0을 일반적인 이름으로 보입니다.

그러나 atinput 프로그램을 사용하여 AT 명령을 보내고 모뎀 응답을 캡처하는 것이 좋습니다. 그것은 특별히 명령 행에서 사용되도록 작성되었습니다. 그러면 모뎀에서 직접 통신하지 않아도되고 응답 만 읽으면 파이프가 처리됩니다.

+0

답변 해 주셔서 감사합니다. 나는 명령을/dev/smd0로 리다이렉트하는 법을 모른다. atinput을 다운로드하고 C 파일을 찾았으나 안드로이드 모바일에서 명령을 실행해야합니다. –

+0

대상 Android 폰용 프로그램을 컴파일해야합니다. 정상적으로 컴파일하려면'make' 만 실행하면됩니다. 안드로이드 바이너리를 만들려면 크로스 컴파일러를 사용해야하므로 Makefile을 편집하고 gcc를 크로스 컴파일러로 대체하십시오. – hlovdal

+0

나는 그것을 얻지 않았다. make는 "makefile"을 의미합니다. 그렇다면 exe 파일이 아니기 때문에 그럴 수 없습니다. 크로스 컴파일러 란 무엇입니까? –