Android默认locking屏幕上的活动
如何显示Activity
或Dialog
在locking屏幕上可见?
我已经尝试在Activity.onCreate()
方法中通过设置各种窗口types来显示我的locking活动:
TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_KEYGUARD
和其他一起使用SYSTEM_ALERT_WINDOW
和INTERNAL_SYSTEM_WINDOW
权限。
我解锁设备后,我的活动是可见的。
更新:
我其实已经设法显示我自己的活动,而不是默认locking屏幕。 除非您使用HOMEbutton,否则它工作正常。
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);
尝试使用此标志来禁用活动开始时的locking屏幕。
API级别17之后,您可以使用
<activity android:name=".yourActivityName" android:showOnLockScreen="true" android:screenOrientation="sensorPortrait" >
showOnLockScreen就像这个例子
不要去做活动,因为安全原因,android不会在你的活动后面显示锁屏,所以使用service来代替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" />
到清单
在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(......);
希望这将工作谢谢
你可以在任何你认为正在工作的答案中使用代码。 然后为了防止HOMEbutton工作,将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);