Как заставить 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(), Я предполагаю, что он может быть установлен таким образом, так как кажется, что вы настраиваете киоск / дисплей.

Другие вопросы по тегам