76

如何在锁定屏幕上显示Activity或显示?Dialog

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

TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_KEYGUARD

和其他连同SYSTEM_ALERT_WINDOWINTERNAL_SYSTEM_WINDOW权限。

解锁设备后,我的活动可见。

更新:

我实际上已经设法显示我自己的活动而不是默认的锁定屏幕。除非您使用 HOME 按钮,否则它可以完美运行。

4

4 回答 4

124
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 就像示例中一样...

于 2011-04-20T07:47:59.330 回答
33

不要去活动,因为出于安全原因,android不会在你的活动后面显示锁定屏幕,所以使用服务而不是活动。

下面是我在我的服务的 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" />到清单

于 2014-12-31T08:32:34.433 回答
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(......);

希望这会工作谢谢

于 2013-07-14T18:04:52.517 回答
0

您可以在此处的任何答案中使用您认为有效的代码。然后为了防止HOME按钮工作,更改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);
于 2016-01-15T07:10:24.903 回答