Android activity over default lock screen

微笑、不失礼 提交于 2019-11-26 01:46:28

问题


How can I display an Activity or Dialog to be visible over the lock screen?

I have already tried displaying my lock activity when screen turns on by setting various window type in Activity.onCreate() method:

TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_KEYGUARD

and others together with SYSTEM_ALERT_WINDOW and INTERNAL_SYSTEM_WINDOW permissions.

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.


回答1:


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

<activity
        android:name=".yourActivityName"
        android:showOnLockScreen="true"
        android:screenOrientation="sensorPortrait" >

showOnLockScreen like in the example...




回答2:


Don't go for activity, because android will not show lock screen behind your activity for security reason, so use service instead of Activity.

Below is my code in onStartCommand of my service.

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




回答3:


Use this in onCreate method

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




回答4:


You can use code in any of answers here that you think it's working. Then to prevent HOME button to work, change TYPE_SYSTEM_ALERT or TYPE_SYSTEM_OVERLAY (depends on what you currently use) to 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);


来源:https://stackoverflow.com/questions/3629179/android-activity-over-default-lock-screen

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!