默认锁定屏幕上的 Android 活动
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3629179/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Android activity over default lock screen
提问by plugmind
How can I display an Activity
or Dialog
to be visible over the lock screen?
如何在锁定屏幕上显示Activity
或Dialog
显示?
I have already tried displaying my lock activity when screen turns on by setting various window type in Activity.onCreate()
method:
我已经尝试通过在Activity.onCreate()
方法中设置各种窗口类型来在屏幕打开时显示我的锁定活动:
TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_KEYGUARD
TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_KEYGUARD
and others together with SYSTEM_ALERT_WINDOW
and INTERNAL_SYSTEM_WINDOW
permissions.
和其他人一起SYSTEM_ALERT_WINDOW
和INTERNAL_SYSTEM_WINDOW
权限。
My activity is visible after I unlock the device.
解锁设备后,我的活动可见。
UPDATE:
更新:
I actually already managed to display my own Activity instead of default lock screen. It work perfectly unless you use HOME button.
我实际上已经设法显示我自己的 Activity 而不是默认的锁定屏幕。除非您使用 HOME 按钮,否则它可以完美运行。
回答by Enes
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);
try using this flags to disable lock screen when the activity is started.
尝试使用此标志在活动开始时禁用锁定屏幕。
After API level 17 you can use
在 API 级别 17 之后,您可以使用
<activity
android:name=".yourActivityName"
android:showOnLockScreen="true"
android:screenOrientation="sensorPortrait" >
showOnLockScreen like in the example...
showOnLockScreen 就像示例中的一样...
回答by Shirish Herwade
Don't go for activity, because android will not show lock screen behind your activity for security reason, so use service instead of Activity.
不要去活动,因为出于安全原因android不会在您的活动后面显示锁定屏幕,所以使用服务而不是活动。
Below is my code in onStartCommand of my service.
下面是我在服务的 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);
And add <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
to manifest
并添加<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
到清单
回答by SarwarCSE
Use this in onCreate method
在 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(......);
Hope this will work Thanks
希望这会奏效谢谢
回答by A. N
You can use code in any of answers here that you think it's working. Then to prevent HOMEbutton to work, change TYPE_SYSTEM_ALERT
or TYPE_SYSTEM_OVERLAY
(depends on what you currently use) to TYPE_SYSTEM_ERROR
:
您可以在此处的任何您认为有效的答案中使用代码。然后为了防止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);