1

ボタンを押したときにモバイルを再起動したい.そのために私はこれらを書いた..

        PowerManager pm;
        public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);        
           pm = (PowerManager) getSystemService(Context.POWER_SERVICE);        
           Button test = (Button) findViewById(R.id.button1);

           test.setOnClickListener(new OnClickListener() {          
        public void onClick(View v) {

            try {
                Process proc = Runtime.getRuntime().exec(new String[] {"su", "-c", "reboot" });

                            int result = proc.waitFor();
                Toast.makeText(ForTestActivity.this, "INt:"+result, Toast.LENGTH_SHORT).show();


            } catch (Exception ex) {
                Log.i("XXXXXXXXXXXX", "Could not reboot", ex);
            }

        }
    });

} 

これはエミュレーターでは機能しません。このアプリケーションの開発には android2.3.3 を使用しています。ボタンを押してもエラーは発生せず、何も起こりませんでした。トーストは結果を1として表示していました。

その後、このコードも試しました..

     Process p = Runtime.getRuntime().exec("su");
                DataOutputStream os = new DataOutputStream(p.getOutputStream());            
                os.writeBytes("reboot"+"\n");                             
                os.writeBytes("exit\n");  
                os.flush(); 

同じ結果です。必要な権限も追加しました。誰かアイデアがありますか?

[どういうわけか、ボタンを押した後に電話を再起動 (またはシャットダウン) したい。]

4

2 に答える 2

1

同様の質問がされ、ここで回答されました。署名するためのファームウェア キーを取得するまで、ルート化されていない電話を再起動することはできません。

于 2012-05-25T10:58:19.233 に答える
1

「su -c」なしで上記のコマンドを試しましたか?

「adb shell reboot」と入力すると、電話が再起動します(ただし、この場合に必要な電話はルート化されています)ので、コードから「再起動」を実行するだけでも同様の効果が得られるはずです。ルート化された電話にはすでにルート権限があるため、「su -c」は不要だと思います(IIRCエミュレーターはデフォルトでルート化されています)。

他の人が述べたように、これはルート化されていない電話では機能しません。

于 2012-05-25T11:05:52.697 に答える