唤醒睡眠锁定 android 不工作
Waking up a sleeping locked android not working
我将 ALARM_SERVICE
与以下 BroadcastReceiver
一起使用,以便开始我的 OnReceiveActivity
:
public class AlarmReciever extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent)
{
try {
Intent i = new Intent();
i.setClassName("com.test", "co.test.OnReceiveActivity");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK );
i.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(i);
} catch (Exception e) {
e.printStackTrace();
}
}
}
当我在没有任何指定的 WindowManager.LayoutParams
标志的情况下尝试它时(当设备处于唤醒和解锁状态时)- 一切都按预期工作,这意味着 onReceive()
被调用并启动 OnReceiveActivity
成功地。但是,当存在标志时,它不起作用,无论是在设备休眠和查看时,还是在唤醒和解锁时。
在清单文件中指定了以下权限:
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
这些不是 Intent
标志,不能与 Intent
上的 addFlags()
一起使用。
正如@CommonsWare 评论的那样,WindowManager.LayoutParams
标志不是 Intent 标志。
正确的方法是在OnReceiveActivity
的onCreate()
中,使用getWindow()
函数如下:
getWindow().addFlags(
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED +
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD +
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON +
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
);
我以前的做法在我看到的很多例子中都有使用,所以很奇怪。
我将 ALARM_SERVICE
与以下 BroadcastReceiver
一起使用,以便开始我的 OnReceiveActivity
:
public class AlarmReciever extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent)
{
try {
Intent i = new Intent();
i.setClassName("com.test", "co.test.OnReceiveActivity");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK );
i.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(i);
} catch (Exception e) {
e.printStackTrace();
}
}
}
当我在没有任何指定的 WindowManager.LayoutParams
标志的情况下尝试它时(当设备处于唤醒和解锁状态时)- 一切都按预期工作,这意味着 onReceive()
被调用并启动 OnReceiveActivity
成功地。但是,当存在标志时,它不起作用,无论是在设备休眠和查看时,还是在唤醒和解锁时。
在清单文件中指定了以下权限:
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
这些不是 Intent
标志,不能与 Intent
上的 addFlags()
一起使用。
正如@CommonsWare 评论的那样,WindowManager.LayoutParams
标志不是 Intent 标志。
正确的方法是在OnReceiveActivity
的onCreate()
中,使用getWindow()
函数如下:
getWindow().addFlags(
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED +
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD +
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON +
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
);
我以前的做法在我看到的很多例子中都有使用,所以很奇怪。