2011-12-09 44 views
12

我想发送设备进入睡眠状态或关闭屏幕。我已经调查,发现这个话题:Turn off screen on Android如何关闭屏幕或发送设备进入睡眠状态

基本上,有三种方法来做到这一点,但我已经发现了三个问题:

一)选择1:

PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE); 
manager.goToSleep(int amountOfTime); 

问题:它导致FC。我已阅读我需要DEVICE_POWER权限,但它不能授予正常的应用程序。

B)选择2:

PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE); 
PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Your Tag"); 
wl.acquire(); 
wl.release(); 

问题:这并不为我工作。我不知道为什么。它不给我一个FC,但它是无害的。

三)选择3:

WindowManager.LayoutParams params = getWindow().getAttributes(); 
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON; 
params.screenBrightness = 0; 
getWindow().setAttributes(params); 

问题:我能得到它的工作,但是当尝试打开设备它不奇怪的事情,就像不喜欢返回,或者,如果我的应用在按下按钮后自动进入睡眠状态。这看起来更像是一种比常规解决方案更好的提示或解决方法。

任何人都可以告诉我任何好方法发送设备睡觉或关闭屏幕,可以运行没有问题?对我而言,这种简单的功能对我来说听起来并不是很好(或者最好记录在案)。

回答

7

我自己回答。有可能关闭设备,但应用程序必须通过API实现设备管理员功能:Device Administration

在此API中有一个locknow()函数可以执行我想要的功能。

无论如何,这是为了扩展android硬件和安全功能,任何人都不可能以这种方式控制设备。

我想要的是能够从简单的手势锁定设备。因为我不想让自己的设备管理器类,我检查是否安装了免费应用程序“lockScreen”并启动它。这是一种快捷方式,也是一种简单的方法来做我想做的事。这个应用程序必须注册为设备管理器,所以它已经实现了这个类。它有可能从市场中获得。

+0

如果我希望它关闭屏幕,而不是锁定,直到我的屏幕锁定超时? –

0

我的应用程序已经这样做了罚款,我发现这个在我PowerManager.class

/** 
* Force the device to go to sleep. Overrides all the wake locks that are 
* held. 
* 
* @param time is used to order this correctly with the wake lock calls. 
*   The time should be in the {@link SystemClock#uptimeMillis 
*   SystemClock.uptimeMillis()} time base. 
*/ 
public void goToSleep(long time) 
{ 
    try { 
     mService.goToSleep(time); 
    } catch (RemoteException e) { 
    } 
} 
+0

你确定你没有抓到API的PowerManager类实现吗?我无法使用此方法,因为我无法获得nessesary权限。 –

+1

“DEVICE_POWER”权限呢? –

相关问题