Я хочу перезагрузить мобильный телефон, когда нажимаю кнопку. Для этого я написал это.
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();
Тот же результат. Я добавил необходимые разрешения также. У кого-то есть какая-то идея?
[Как-то я хочу перезапустить (или выключить) телефон после нажатия кнопки.]
Вы пробовали эту команду без "su -c"?
Когда я набираю "перезагрузка оболочки adb", мой телефон перезагружается (но мой телефон укоренен, который необходим в этом случае), поэтому я думаю, что эффект должен быть аналогичным, если вы просто выполняете "перезагрузку" из кода. Я думаю, что "su -c" не требуется, поскольку у вас есть права root уже на корневом телефоне (эмулятор IIRC коренится по умолчанию).
Как уже упоминалось, это не будет работать на телефоне с открытым кодом.
Аналогичный вопрос задавали и отвечали здесь. Вы не можете перезагрузить неподдерживаемый телефон, пока у вас нет ключа прошивки, чтобы его подписать.