Как заставить Android-устройство переходить в спящий режим (скажем, по нажатию кнопки), на рутированном устройстве
Я делаю приложение с включенным режимом хоста. Теперь моя проблема заключается в том, что мне нужно перевести устройство в спящий режим в режиме ожидания моего приложения.
Некоторые моменты:
- Кнопка питания будет недоступна (так как устройство будет установлено в какой-либо коробке / контейнере)
- USB-кабель OTG подключен: в режиме HOST USB получает питание от устройства Android.
- Питание от адаптера происходит медленнее, чем от OTG-кабеля.
- Я включил не спать во время зарядки.
- Мой Android рутирован.
Итак, мне нужно сделать принудительный сон через определенное время или запустить даже нажатием кнопки. Заранее спасибо, друзья.
3 ответа
Решение
Наконец я решил это.
Этот класс перейдет в спящий режим / отключится через заданное время.
public class MainActivity extends Activity {
public static final long DISCONNECT_TIMEOUT = 10000; // 10 sec, time to go sleep
protected static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
private Runnable disconnectCallback = new Runnable() {
@Override
public void run() {
Log.d(TAG, "++++Idle State End");
Toast.makeText(getApplicationContext(), "Going to Sleep Mode", 0).show();
goToSleep();
}
};
//Display off
public void goToSleep() {
try {
// REQUIRES ROOT
Process proc;
proc = Runtime.getRuntime().exec("su", null, null);
OutputStream os = proc.getOutputStream();
os.write(("sendevent /dev/input/event1 1 116 1; sendevent /dev/input/event1 0 0 0; sendevent /dev/input/event1 1 116 0; sendevent /dev/input/event1 0 0 0;")
.getBytes("ASCII"));
os.flush();
os.close();
// 79
proc.waitFor();
} catch (Exception ex) {
}
}
private Handler disconnectHandler = new Handler() {
public void handleMessage(Message msg) {
Log.d(TAG, "++++disconnectHandler");
}
};
public void resetDisconnectTimer() {
disconnectHandler.removeCallbacks(disconnectCallback);
disconnectHandler.postDelayed(disconnectCallback, DISCONNECT_TIMEOUT);
}
public void stopDisconnectTimer() {
disconnectHandler.removeCallbacks(disconnectCallback);
}
@Override
public void onUserInteraction() {
resetDisconnectTimer();
}
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "onResume");
resetDisconnectTimer();
}
@Override
public void onStop() {
super.onStop();
stopDisconnectTimer();
}
}
Я надеюсь, что мой ответ будет ссылаться на кого-то еще.
Runtime.getRuntime().exec(new String[] {
"su", "-c", "input keyevent 26"
}).waitFor();
Если ваше приложение установлено в качестве администратора устройства, вы можете использовать что-то простое, как lockNow()
, Я предполагаю, что он может быть установлен таким образом, так как кажется, что вы настраиваете киоск / дисплей.