Android,如何启动活动锁定屏幕

时间:2016-02-12 07:17:15

标签: android

我希望通过锁定屏幕在推送通知上启动我的活动,而无需更改锁定。

该活动的任何特殊许可?

4 个答案:

答案 0 :(得分:7)

在API级别17之后,这将起作用

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

或在调用setContentView()

之前在onCreate()中写这个
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 

答案 1 :(得分:3)

在onCreate(Bundle savedInstanceState)方法中,你应该添加一些窗口标志:

Window window = this.getWindow();
window.addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD);
window.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
window.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON);

答案 2 :(得分:2)

其他答案包括您可能想要或不想要的其他功能。

允许您的活动显示在锁定屏幕上的最小代码是:

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (Build.VERSION.SDK_INT >= 27)
        setShowWhenLocked(true);
    else
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);

    // setContentView etc
}

如果您还希望自己的活动打开屏幕(可能已关闭)或解锁键盘锁,请参阅Vladimir Demirev's answer

答案 3 :(得分:1)

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1)
    {
        setShowWhenLocked(true);
        setTurnScreenOn(true);
        KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
        if(keyguardManager!=null)
            keyguardManager.requestDismissKeyguard(this, null);
    }
    else 
    {
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
                WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
    }