Yar*_*Yar 76
要唤醒屏幕:
PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock = pm.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "TAG");
wakeLock.acquire();
Run Code Online (Sandbox Code Playgroud)
要释放屏幕锁定:
KeyguardManager keyguardManager = (KeyguardManager) getApplicationContext().getSystemService(Context.KEYGUARD_SERVICE);
KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("TAG");
keyguardLock.disableKeyguard();
Run Code Online (Sandbox Code Playgroud)
清单需要包含:
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
Run Code Online (Sandbox Code Playgroud)
有关PowerManager的更多详细信息,请参阅API文档:http://developer.android.com/reference/android/os/PowerManager.html
编辑:此答案报告为已弃用.
hac*_*bod 33
最好是使用这些窗口标志的一些适当组合:
http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_DISMISS_KEYGUARD
http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_SHOW_WHEN_LOCKED
http:// developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_KEEP_SCREEN_ON
http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_TURN_SCREEN_ON
如果您想在不支持所需标志的旧版本平台上运行,您可以直接使用唤醒锁和键盘锁......但这条路充满了危险.
一个重要说明:您的活动必须全屏,以便上述标志组合起作用.在我的应用程序中,我试图使用这些标志与不是全屏幕的活动(对话框主题),它不起作用.在查看文档后,我发现这些标志要求窗口是一个全屏窗口.
我找到了一种方法,它并不复杂......适用于任何API版本.
您需要使用PowerManager.userActivity(l, false)方法并将您的活动注册为SCREEN_OFF意图收到的广播:
在你的活动中OnCreate提出了类似的东西:
mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.v(TAG, "Screen OFF onReceive()");
screenOFFHandler.sendEmptyMessageDelayed(0, 2000L);
}
};
Run Code Online (Sandbox Code Playgroud)
它将在屏幕关闭事件2秒后启动处理程序.
在onResume()方法中注册接收器:
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
registerReceiver(mReceiver, filter);
Log.i(TAG, "broadcast receiver registered!");
Run Code Online (Sandbox Code Playgroud)
创建一个如下所示的处理程序:
private Handler screenOFFHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
// do something
// wake up phone
Log.i(TAG, "ake up the phone and disable keyguard");
PowerManager powerManager = (PowerManager) YourActivityName.this
.getSystemService(Context.POWER_SERVICE);
long l = SystemClock.uptimeMillis();
powerManager.userActivity(l, false);//false will bring the screen back as bright as it was, true - will dim it
}
};
Run Code Online (Sandbox Code Playgroud)
请求清单文件中的权限:
<uses-permission android:name="android.permission.WAKE_LOCK" />
Run Code Online (Sandbox Code Playgroud)
完成后不要忘记取消注册广播接收器.你可以在onDestroy()中做到这一点(不保证)
unregisterReceiver(mReceiver);
Log.i(TAG, "broadcast UNregistred!");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
80348 次 |
| 最近记录: |