Android默认locking屏幕上的活动

如何显示ActivityDialog在locking屏幕上可见?

我已经尝试在Activity.onCreate()方法中通过设置各种窗口types来显示我的locking活动:

TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_KEYGUARD

和其他一起使用SYSTEM_ALERT_WINDOWINTERNAL_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_ALERTTYPE_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);