关闭Android上的屏幕
我正在尝试在某个特定动作发生后打开和关闭显示器(让我们现在只担心关闭屏幕)。从我对wake lock的理解来看,这就是我所拥有的:关闭Android上的屏幕,android,wakelock,android-wake-lock,Android,Wakelock,Android Wake Lock,我正在尝试在某个特定动作发生后打开和关闭显示器(让我们现在只担心关闭屏幕)。从我对wake lock的理解来看,这就是我所拥有的: PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag"); 当我阅读stackoverflow和其他
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
当我阅读stackoverflow和其他地方的其他帖子时,他们似乎告诉我部分唤醒锁定会关闭屏幕。但是如果我阅读SDK,它会说它只允许关闭屏幕。所以我认为这是不对的
任何提示都会有帮助!
谢谢
Mike以下内容是从中复制的。 如果你想保持屏幕打开,我认为
screen\u BRIGHT\u WAKE\u LOCK
就足够了
关闭屏幕有两种选择:
PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE);
// Choice 1
manager.goToSleep(int amountOfTime);
// Choice 2
PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Your Tag");
wl.acquire();
wl.release();
您可能也需要此权限:
<uses-permission android:name="android.permission.WAKE_LOCK" />
对我来说,那些方法不起作用。因此,我使用了其他场景(并非微不足道)来关闭屏幕 Android有两个负责唤醒的标志:
- 显示-->屏幕超时
- 应用程序-->开发-->充电时保持清醒复选框
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
/**
* Catch Screen On/Off
* */
public class BroadcastReceiverScreenListener extends BroadcastReceiver{
private BroadCastListenerCallBackItf mBroadCastListenerCallBack = null;
public BroadcastReceiverScreenListener(
BroadCastListenerCallBackItf broadCastListenerCallBack) {
this.mBroadCastListenerCallBack = broadCastListenerCallBack;
}
@Override
public void onReceive(Context arg0, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
mBroadCastListenerCallBack.broadCastListenerCallBack__ScreenOff_onResponse();
}
}
}
用作回调的接口
public interface BroadCastListenerCallBackItf {
public void broadCastListenerCallBack__ScreenOff_onResponse();
}
主类中的2个方法:
....
AndroidSynchronize mSync = new AndroidSynchronize();
....
public void turnScreenOff(int wait){
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
BroadCastListenerCallBackItf broadCastListenerCallBack = this;
BroadcastReceiver mReceiver = new BroadcastReceiverScreenListener(broadCastListenerCallBack);
m_context.registerReceiver(mReceiver, filter);
//set Development --> disable STAY_ON_WHILE_PLUGGED_IN
Settings.System.putInt(
m_context.getContentResolver(),
Settings.System.STAY_ON_WHILE_PLUGGED_IN,
0 );
// take current screen off time
int defTimeOut = Settings.System.getInt(m_context.getContentResolver(),
Settings.System.SCREEN_OFF_TIMEOUT, 3000);
// set 15 sec
Settings.System.putInt(m_context.getContentResolver(),
Settings.System.SCREEN_OFF_TIMEOUT, 15000);
// wait 200 sec till get response from BroadcastReceiver on Screen Off
mSync.doWait(wait*1000);
// set previous settings
Settings.System.putInt(m_context.getContentResolver(),
Settings.System.SCREEN_OFF_TIMEOUT, defTimeOut);
// switch back previous state
Settings.System.putInt(
m_context.getContentResolver(),
Settings.System.STAY_ON_WHILE_PLUGGED_IN,
BatteryManager.BATTERY_PLUGGED_USB);
m_context.unregisterReceiver(mReceiver);
}
public void broadCastListenerCallBack__ScreenOff_onResponse() {
mSync.doNotify();
}
....
AndroidSynchronize类
public class AndroidSynchronize {
public void doWait(long l){
synchronized(this){
try {
this.wait(l);
} catch(InterruptedException e) {
}
}
}
public void doNotify() {
synchronized(this) {
this.notify();
}
}
public void doWait() {
synchronized(this){
try {
this.wait();
} catch(InterruptedException e) {
}
}
}
}
[编辑]
您需要注册权限:
android.permission.WRITE_SETTINGS
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
试一试-
wakeLock.acquire(1000);//指定时间,它会变暗并最终关闭。根据此,您也可以按如下方式关闭屏幕:
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, 1000);
1000以毫秒为单位,即1秒,您可以根据需要将其替换为任何值
所需许可:
android.permission.WRITE_SETTINGS
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
根据我的经验,这些方法非常不可靠。嗨,阿拉什,当我尝试第一个选择时,我得到了一个力接近。我试着调试它,但似乎也不起作用。我只是经理,goToSleep(1000);我不知道1000是什么意思。当我尝试选择2时,我什么也没发生。我们确定这会关闭显示器吗?或者它只是阻止其他任何东西关闭显示器。我拥有清单中设置的权限。感谢您的帮助。另外,将值设置为小于0,将亮度设置为默认值(首选屏幕亮度)。再次感谢您的回复!我尝试使用-1,0,并使用保存的变量(getWindow().getAttributes().screenBrightness;更早)来恢复它,每次它返回到只有黑屏且背光打开时。您可能还有其他建议吗?您的第一个方法,选择一,需要设备电源权限。尝试了您的方法,但重要的是它需要android.permission.WRITE\u设置,否则99%的应用不需要这些设置。什么是主类
?在myMainActivity.java
中尝试过,但BroadCastListenerCallBackItf broadCastListenerCallBack=此代码>失败。@Deqing请确保MainActivity实现了BroadCastListenerCallBackItf
谢谢这是我想到的同一个想法。在这15秒内,我启动了一个倒计时,这样用户可以根据需要设置唤醒锁。然后仅当电源连接事件时才移除唤醒锁。我相信您所说的是屏幕超时,与唤醒锁无关。获取(1000);//wakelock在1秒后释放,然后手机的屏幕超时正在完成它的工作。尝试此操作后,屏幕仍需要大约10秒才能关闭。虽然它确实工作,但您可能不想这样做,除非您也读取超时并在之后将超时设置回其原始值;但是,如果您的应用程序因任何原因崩溃,您(或更糟的是,用户)手中的设备会在一秒钟后休眠(并且无法再以这种方式将设置更改为少量时间),此设置也会在重新启动后继续存在,并且您拥有一个完全无用的设备(使用此设置重新启动已经很困难了…)我也在努力解决这个问题,我必须补充一点:当然,在没有连接电缆的情况下进行测试!!!许多设备在连接电缆或未连接电缆的情况下显示不同的行为,因此如果您想测试它,请安装您的应用程序;断开电缆连接,然后测试应用程序!!!
<uses-permission android:name="android.permission.WRITE_SETTINGS" />