2011-04-12 3 views

답변

1

정상 SDK 응용 프로그램을 휴대폰 종료하거나 재부팅의 원인이 없습니다. 펌웨어의 일부인 응용 프로그램 (즉, 펌웨어 보안 키로 서명 된 응용 프로그램) 만 적절한 권한을 보유하고 이러한 작업을 수행 할 수 있습니다.

1

나는 이것을 시도하지 않았으며, 코드에서 재부팅하는 데 많은 제한이 있다고 생각한다. 하지만 당신은 권한을 확인하기 위해 시도 할 수 있습니다 :

<uses-permission android:name="android.permission.REBOOT" /> 

here에서 난 당신이 몇 가지 여분의 문서화되지 않은 물건해야 할 수 있습니다 읽어

Intent i = new Intent(Intent.ACTION_REBOOT); 
i.putExtra("nowait", 1); 
i.putExtra("interval", 1); 
i.putExtra("window", 0); 
sendBroadcast(i); 

이 링크에서 문장의 특별한 통지를 가지고 :

은 API 문서에 포함되어 있지 않을뿐만 아니라 은 플랫폼 인증서로 서명해야합니다. 시스템 소프트웨어가있는 기기에서 실행중인 경우에만 사용하십시오.

0

android SDK 문서에는 Intent.ACTION_REBOOt에 대한 메모가 있습니다. 그것은 "시스템에 의해서만 전송 될 수있는 보호 된 의도입니다"라고 말합니다. 보안상의 이유로이 인 텐트를 사용하여 장치를 재부팅 할 권한이 없다고 생각합니다.

0

이것을보십시오. 그러나 busybox를 설치해야합니다.

public static boolean selfShutdown() { 
    boolean bOK = false; 
    String telnetCmd = "busybox telnet 10.0.2.2 5554"; 
    String cmd = "kill"; 

    try { 
     String out = String.format("telnetCmd=%s", telnetCmd); 
     Log.i(TAG+".selfShutdown", out); 
     Process p = Runtime.getRuntime().exec(telnetCmd); 
     DataOutputStream os = new DataOutputStream(p.getOutputStream()); 
     String command = String.format("%s\n", cmd); 
     os.writeBytes(command); 
     os.flush(); 
     out = String.format("%s", "complete os.flush()"); 
     Log.i(TAG+".selfShutdown", out); 
     p.waitFor(); 
     out = String.format("%s", "complete p.waitFor()"); 
     Log.i(TAG+".selfShutdown", out); 
     bOK = true; 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 

    return bOK; 
} 
관련 문제