我想写一个简单的程序,在主要活动中只有一个按钮,设备将睡眠时,点击这个按钮(就像手机睡眠时,我们点击电源按钮在android供电的智能手机)。请帮帮我。
发布于 2015-05-02 23:16:40
在Lollipop之前,没有公共API允许您这样做。在棒棒糖中,你需要是一名设备管理员,并按照CommonsWare的建议使用DevicePolicyManager#lockNow()。然而,有一个技巧你可以使用(mwahaha)来实现你想要的东西。首先,您需要WRITE_SETTINGS权限
<uses-permission android:name="android.permission.WRITE_SETTINGS" />这将允许您更改某些系统设置。我们想要的是Settings.System.SCREEN_OFF_TIMEOUT。然后,您可以将screen-timeout设置为0毫秒,这将在一两秒后导致屏幕关闭。在屏幕关闭后,您需要重置超时,这样屏幕就不会在您不想让它超时时不断超时。
final int previous = Settings.System.getInt(getContentResolver(),
Settings.System.SCREEN_OFF_TIMEOUT); // retain previous timeout value
Settings.System.putInt(getContentResolver(),
Settings.System.SCREEN_OFF_TIMEOUT, 0); // set timeout to 0
// wait 3 seconds then reset the timeout setting
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Settings.System.putInt(
getContentResolver(),
Settings.System.SCREEN_OFF_TIMEOUT, previous);
}
}).start();警告:这绝对是一个讨厌的黑客攻击。因此,它是不可靠的。可能有许多事情可能导致此操作不起作用。例如,应用程序可能是显式keeping the device awake的。可能还有其他系统或开发人员设置也会阻止设备超时-例如,当设备被插入时。底线是,Android不希望你的应用程序有能力做到这一点,你可能应该学会接受它。
发布于 2015-07-14 16:38:40
为了实现探路者精英提到的方法,必须将应用程序作为系统应用程序进行签名。另一种解决方法是,您可以启用
LOCAL_PRIVILEGED_MODULE := true
在您的Android.mk文件中。这将给你的应用程序一个特权模式。(当然,您只能在拥有firmware build工作区的情况下执行此操作。)
https://stackoverflow.com/questions/30003606
复制相似问题