如何在锁定屏幕上显示Activity
或Dialog
?
我已经尝试通过在Activity.onCreate()
方法中设置各种窗口类型来显示我的锁定活动:
TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_KEYGUARD
以及其他SYSTEM_ALERT_WINDOW
和INTERNAL_SYSTEM_WINDOW
权限。
解锁设备后,我的活动可见。
更新:
我实际上已经设法显示我自己的Activity而不是默认锁定屏幕。除非您使用HOME按钮,否则它可以完美地工作。
答案 0 :(得分:114)
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 ...
答案 1 :(得分:30)
不要去参加活动,因为出于安全原因,android不会在你的活动后面显示锁定屏幕,所以使用服务代替Activity。
以下是我服务的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" />
添加到清单
答案 2 :(得分:19)
在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(......);
希望这会奏效 感谢
答案 3 :(得分:0)
您可以在此处使用您认为有效的任何答案中的代码。然后,为防止 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);