2010-06-16 1 views
4

코드 내에서 명령을 실행하려고 시도합니다. 명령은 "echo 125> /sys/devices/platform/flashlight.0/leds/flashlight/brightness입니다. " 내가 그것을 실행하는 런타임 클래스를 사용하고android : 코드 내에서 셸 명령을 실행하는 방법

내가 ADB 쉘에서 문제없이 실행할 수 있습니다 : I는 SYS 디렉토리에 액세스 안하고 이후에 권한 오류가 발생하지만

Runtime.getRuntime().exec("echo 125 > /sys/devices/platform/flashlight.0/leds/flashlight/brightness"); 

. 공백이 문제를 일으켰지 만 많은 차이를 만들지 않았을 경우를 대비해 String []에 명령을 배치하려고했습니다.

아무도 이것에 대한 해결 방법을 알고 있습니까?

답변

0

나는이 장치가 작동하려면이 장치가 "루팅"되어야한다고 생각합니다. 구글 검색을 해보고 다른 개발자들이 이걸 어떻게 보지 않았는지, 손전등 애플 리케이션의 부족은 없다.

+0

.. 쓸 수있는 권한으로/시스템을 remout 내 욕망에지도하고 나는 아직도 기다리고, 그것을위한 shource 코드가없는 수 개발자가 나에게 힌트를주기 위해. 답변 주셔서 감사합니다 – ee3509

2

동의하면 전화를 뿌리 뽑아 시스템 파일에 기록해야 할 것입니다. 밝기가 SDK를 통해 공개되지 않는다는 것에 놀랐습니다. 코드에서 쉘 명령을 실행에 대한 자세한 내용은

, check out이 프로젝트 :

+0

의견을 보내 주셔서 감사합니다.이 방법은 현재 사용하고있는 접근 방식이며 여전히 권한 오류가 발생합니다. adb 셸에서 동일한 명령을 보내려고하면 명령이 제대로 실행되므로 뿌리가있는 전화기가 필요하지 않을 수도 있습니다. 확실하지는 않습니다. – ee3509

+0

핸드셋에 해당 파일/장치가 없습니다. flashlight.0 디렉토리는 어떤 수단으로 제공됩니까? 나는'adb shell '을 사용하여 주변을 검색했고'/ sys/devices/platform'까지'cd'할 수 있다는 것을 알았지 만 flashlight.0이라는 파일은 없었습니다. 또한 해당 디렉토리의 모든 항목은 root가 755 모드로 소유하고 있으므로 루트 사용자 만 파일에 쓸 수 있습니다. 이 권한은'/ sys' 아래에있는 모든 것에 적용되는 것으로 보이며'flashlight.0/leds/flashlight/brightness'가 존재하고 루트가 소유하고, 모드 755 권한 ('drwxr-xr-x')을 가지고 있다면, 그럼 당신은 뿌리가 있어야합니다. –

+0

HTC Desire를 사용하고 있는데 파일이 있습니다. 내 장치를 뿌리 내리지 않고도 adb 셸에서 명령을 성공적으로 실행했습니다 (뒷면의 LED가 켜짐).밝기에 대한 사용 권한은 (-rw-rw-rw-) – ee3509

12

전화 나중에 당신은 같은 것을 할 수있는, 뿌리를 할 필요가 : 방금 설정하려는 경우

public static void doCmds(List<String> cmds) throws Exception { 
    Process process = Runtime.getRuntime().exec("su"); 
    DataOutputStream os = new DataOutputStream(process.getOutputStream()); 

    for (String tmpCmd : cmds) { 
      os.writeBytes(tmpCmd+"\n"); 
    } 

    os.writeBytes("exit\n"); 
    os.flush(); 
    os.close(); 

    process.waitFor(); 
}  
+0

이미 라우트되지 않은 장치에서이 작업을 시도했지만 예상대로 작동하지 않았습니다. 그러나 필자는 adb 셸에서 명령을 성공적으로 실행할 수 있기 때문에 여기에 뭔가 빠져있을 수 있다고 생각합니다. 그리고 어떻게 든 LED를 켜는 소프트웨어를 발견했습니다. 답변 해 주셔서 감사합니다. – ee3509

+0

이것은 루트 된 장치에서만 작동합니다. PC에서 ADB를 사용하면 장치에서 실행되는 응용 프로그램보다 더 많은 권한을 가질 수 있습니다 (에뮬레이터에서 보안 된 장치와 달리 ADB는 실제로 루트로 명령을 실행할 수 있음). 안드로이드는 ** 앱이 시스템 전체에 적용되는 명령을 실행하도록 허용하지 않기 위해 특별히 설계되었습니다 **. 사람들이 루트 심 (shim)으로 장치를 해킹하는 이유는 보안 장치를 통해 큰 구멍을 뚫는 것입니다.이 구멍은 스톡 장치에 존재하지 않아야하는 구멍입니다. –

1

을 밝기, provided API (일명, 당신이 당신의 방식대로 해보려하는 이유가 있습니까?)을 통해 그렇게하지 않으시겠습니까?

int brightness = 125; 
Settings.System.putInt(
     ftaContext.getContentResolver(), 
     Settings.System.SCREEN_BRIGHTNESS, 
     brightness); 
+0

나는 화면 밝기가 아니지만, 카메라의 렌즈 옆에 플래시가 끼어 들었다. 카메라 설정에 FLASH_MODE_TORCH 속성이 있습니다.이 속성은 원하는대로 지원되지 않지만 (시도했을 때 광산에서 많이 사용하지는 않았지만) 분명히 해결 방법이 있다고 생각하는 소프트웨어를 보았습니다. 감사합니다. – ee3509

+0

@ ee3509 - 아, 내 실수. 나는 방금 마지막 매개 변수로 '밝기'를보고 경로의 플래시 부분을 보지 못했습니다. – JasCav

1

adb 쉘은 루팅 된 디바이스없이 수퍼 유저로 작동 할 수 있습니다. 디버그 브리지입니다. 당신은 당신이 그것을 통해 무엇이든 할 수 있습니다.

하지만 Runtime.getRuntime(). exec을 호출 할 때 같은 전제가 없습니다. 일부 쉘 명령은 exec에서도 사용할 수 없습니다.

그래서 뿌리를 내야하는 기기가 필요할뿐만 아니라 예비 설정도 필요합니다.

+1

adb 셸을 사용하더라도 장치에서 루트/수퍼 유저 액세스 권한이 없지만 일반 앱보다 조금 더 액세스 할 수 있습니다. – Ralf

1

또한 나는 단지 플래시를 켤 수있는 하나의 응용 프로그램을 본 적이