我正在制作启用主机模式的应用程序。现在我的问题是我需要让设备在我的应用程序空闲状态下进入睡眠模式。
几点:
- 无法访问电源按钮,(因为设备将安装在某些盒子/容器中)
- 已连接 USB OTG 电缆:在 HOST 模式下,USB 从 android 设备获取电力。
- 从适配器上电比从OTG 电缆上电慢。
- 我启用了充电时不睡觉。
- 我的 Android 已植根。
所以,我需要在特定时间后强制睡眠,或者通过单击按钮触发一个偶数。提前谢谢朋友们。
我正在制作启用主机模式的应用程序。现在我的问题是我需要让设备在我的应用程序空闲状态下进入睡眠模式。
几点:
所以,我需要在特定时间后强制睡眠,或者通过单击按钮触发一个偶数。提前谢谢朋友们。
最后我解决了这个问题。
此类将在预定义的时间后进入睡眠/显示关闭状态。
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()
. 我认为它可以以这种方式安装,因为听起来您正在执行自定义信息亭/显示设置。