默认锁定屏幕上的Android活动
如何显示Activity
或Dialog
在锁定屏幕上可见?默认锁定屏幕上的Android活动
我已经尝试显示我的锁活动,当屏幕打开在Activity.onCreate()
方法设置各种窗口类型:
TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_KEYGUARD
和其他人一起SYSTEM_ALERT_WINDOW
和INTERNAL_SYSTEM_WINDOW
权限。
我解锁设备后,我的活动可见。
UPDATE:
我其实已经成功地展示我自己的活动,而不是默认的锁屏。除非您使用HOME按钮,否则它会完美工作。
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD|
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
尝试使用此标志在活动启动时禁用锁定屏幕。
API 17级后,你可以在例子中使用
<activity
android:name=".yourActivityName"
android:showOnLockScreen="true"
android:screenOrientation="sensorPortrait" >
showOnLockScreen像...
这甚至不需要任何权限。奇怪。 – 2014-04-27 07:22:09
不适用于我的情况,是否需要特殊许可? – 2014-05-20 11:40:42
问题是,至少在4.4上,当在锁定屏幕上设置密码时,这不起作用。有没有人知道如何保持锁定屏幕,但仍然能够显示它的对话? – 2014-09-04 14:19:34
使用此在onCreate方法
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
// This line should be before setContentView..
setContentView(......);
希望这会工作 谢谢
如何避免在电话铃响时显示。闹铃等。 – Subha 2016-04-12 08:15:48
不要去参加活动,因为出于安全原因,android不会在活动后面显示锁定屏幕,所以请使用服务而不是活动。
以下是我的服务onStartCommand中的代码。
WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
View mView = mInflater.inflate(R.layout.score, null);
WindowManager.LayoutParams mLayoutParams = new WindowManager.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT, 0, 0,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
/* | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON */,
PixelFormat.RGBA_8888);
mWindowManager.addView(mView, mLayoutParams);
并添加<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
体现
非常感谢! – 2015-05-12 21:25:52
非常感谢你... – 2015-06-28 16:22:42
我可以用它来显示显示屏上的布局。但它不会收到事件,即使我添加了事件处理程序。如何克服这个问题? – nagylzs 2015-08-24 13:27:18
您可以在任何答案使用代码在这里,你认为它的工作。然后,以防止HOME按钮的工作,改变TYPE_SYSTEM_ALERT
或TYPE_SYSTEM_OVERLAY
(取决于你目前使用的)来TYPE_SYSTEM_ERROR
:
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
WindowManager.LayoutParams.FLAG_FULLSCREEN |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD,
PixelFormat.TRANSLUCENT
);
params.gravity = Gravity.TOP;
mOverlay = (RelativeLayout) inflater.inflate(R.layout.main, (ViewGroup) null);
mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
mWindowManager.addView(mOverlay, params);
究竟是你想实现什么目标?你是否试图实现自己的锁定屏幕,或者你想让你的警报窗口显示在锁定屏幕上(不管是什么)或者......? – 2010-09-09 12:15:39
其实我希望我能够实现两个:自己的锁定屏幕和对话框在现有的锁定屏幕上。 – plugmind 2010-09-09 14:27:54
我可以告诉你有关在锁屏上显示一个窗口:请参阅http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_SHOW_WHEN_LOCKED – 2010-09-09 15:09:03