即使屏幕在Android中被锁定,也会启动活动屏幕

yuv*_*a ツ 12 android broadcastreceiver android-activity screen-lock

即使屏幕被锁定,如何在设备上启动活动.我尝试如下,但它不起作用.

广播接收器:

Intent alarmIntent = new Intent("android.intent.action.MAIN");
        alarmIntent.setClass(context, Alarm.class);
        alarmIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        alarmIntent.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED +
                             WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD +
                             WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON +
                             WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
        context.startActivity(alarmIntent);
Run Code Online (Sandbox Code Playgroud)

Jun*_*aid 18

您可以通过两种方式实现此目的:

  1. 在这篇文章中使用@Yup解释的唤醒锁.

  2. 使用窗口标志.

使用窗口标志:

打开要在启动活性的onReceive(...).将其粘贴onCreate()到该活动A中

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);
Run Code Online (Sandbox Code Playgroud)

确保你之前没有粘贴它setContentView(...):-)

  • 是的,你没有权限@Dika (2认同)

Yup*_*Yup 15

您需要以下AndroidManifest.xml文件中的以下权限:

<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
Run Code Online (Sandbox Code Playgroud)

此处查看清单详细信息.您可以在查询中查看此链接.


小智 5

Paste this in your onCreate method of the activity you want to open when the screen is locked, after setContentView()

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); 
Run Code Online (Sandbox Code Playgroud)