我使用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" />
。但是,当标志存在时,它既不起作用,也不起作用,当设备处于睡眠状态并且看不到时,也不会在其唤醒和解锁时。
在清单文件中指定了以下权限:
{{1}}
答案 0 :(得分:3)
这些不是Intent
标记,不能与addFlags()
上的Intent
一起使用。
答案 1 :(得分:0)
正如@CommonsWare所评论的那样,WindowManager.LayoutParams
标志不是Intent标志。
正确的方法是在onCreate()
OnReceiveActivity
范围内,使用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
);
我以前做过的方式被用在了很多我见过的例子中,这很奇怪。