如何让Android设备在root设备上进入睡眠模式(比如按下按钮)

时间:2013-09-23 12:42:25

标签: android android-permissions rooted-device

我正在制作启用了主机模式的应用。 现在我的问题是我需要让设备在我的应用程序的空闲状态下进入睡眠模式。

一些要点:

  • 电源按钮将无法访问,(因为设备将安装在某些盒子/容器中)
  • 连接了USB OTG线:在HOST模式下,USB从Android设备获取电源。
  • 来自适配器的
  • 开机比来自OTG线缆的电源输出慢。
  • 充电时我启用了不要睡觉
  • 我的Android已植根。

所以,我需要在特定时间后强制进入睡眠状态,或者通过单击按钮进行激活。 提前谢谢,朋友们。

3 个答案:

答案 0 :(得分: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();
}

}

我希望我的回答会引用给别人。

答案 1 :(得分:1)

Runtime.getRuntime().exec(new String[] { 
    "su", "-c", "input keyevent 26"
}).waitFor();

答案 2 :(得分:0)

如果您的应用是作为设备管理员安装的,则可以使用像lockNow()这样简单的功能。我认为它可以这样安装,因为它听起来像是在做自定义信息亭/显示设置。