我希望能够在设备被密码锁定时启动不属于我的应用程序的活动。如果可能的话,我怎么能做到这一点?
注意:我很清楚我的活动getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
范围内onCreate
。但是,这不起作用,因为我没有开始我自己的活动,而是我的应用程序之外的第 3 方活动。
我希望能够在设备被密码锁定时启动不属于我的应用程序的活动。如果可能的话,我怎么能做到这一点?
注意:我很清楚我的活动getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
范围内onCreate
。但是,这不起作用,因为我没有开始我自己的活动,而是我的应用程序之外的第 3 方活动。
覆盖函数
public void onAttachedToWindow() {
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}
这将使您的活动在解锁后可见。
仅当实际开发人员通过覆盖onAttachedToWindow()
您尝试从应用程序中打开的活动中的方法来编写代码时,这才有可能。
如果不是,那么,很抱歉,但你没有选择去做你想做的事情(就最近的 API 而言)
如果您尝试通过锁定屏幕启动任何第三方应用程序,它将不起作用。正如您自己观察到的,您需要设置窗口标志以确保活动在锁定屏幕上启动,无法确保来自其他第三方应用程序的活动也设置相同的标志。
如果您正在构建一个功能包,其中每个功能只不过是一个不同的应用程序,那么您必须确保这些功能的所有入口点都设置了这个窗口标志。最好的办法是声明一个 BaseActivity,它在创建时设置适当的标志,并让所有功能开发团队将其用作入口点的基类。