如何在设备锁定时显示活动?

时间:2016-05-19 14:01:31

标签: android locking

我想在我锁定设备时显示一个Android活动。 每次,如果我锁定我的平板电脑(例如),我应该看一个活动。

所以,我在AndroidManifest.xml中构建了它:

<activity
    android:name=".activity.SetupInfoEmergencyActivity"
    android:label="@string/app_name"
    android:showOnLockScreen="true"
    android:screenOrientation="sensorPortrait">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

这是活动代码

public class SetupInfoEmergencyActivity extends AppCompatActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        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);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settings_activity);
    }

}

现在,如果我尝试运行调试,我可以看到此活动,但如果我取消锁定我的设备,并且我锁定设备,我就看不到该活动。

2 个答案:

答案 0 :(得分:2)

在onCreate

的方法的最后一个中使用此代码
    //show if unlock
    final Window win = getWindow();
    win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
            | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
    win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
            | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
            | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);

答案 1 :(得分:0)

不要使用活动。出于安全原因,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);

并添加     使用权限android:name =“android.permission.SYSTEM_ALERT_WINDOW”来表示

这是另一篇类似帖子的副本。我用自定义视图快速尝试了它,它运行得很好。不过,不知道你的意图是什么。