无论设备发生什么,我都需要我的活动才能保持领先。因此,确保其正常运行的机制之一也是使用AlarmManager
。
但它在各种设备上的表现并不一致:运行Android 4.2的原始平板电脑。按预期工作。运行相同Android版本的模拟器仅触发警报一次然后停止。 Android 5.x根本不会触发警报。
logcat中没有消息表明此设置存在任何问题。
添加AlarmManager条目的代码:
void runCheckTop(boolean create)
{
String TOP_CHECK = ".TOP_CHECK";
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
String action = getPackageName() + TOP_CHECK;
PendingIntent intent = PendingIntent.getBroadcast(this, 1, new Intent(action), PendingIntent.FLAG_CANCEL_CURRENT);
log.i("kiosk mode", "setting AlarmManager entry '%s'", action);
if (create)
alarmManager.setInexactRepeating(AlarmManager.RTC, System.currentTimeMillis(), 500, intent);
else
alarmManager.cancel(intent);
}
接收者:
public class SIPIncomingCallReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
log.e("Incoming receiver intent", intent.getAction());
if (intent.getAction().equals(context.getPackageName() + MainActivity.TOP_CHECK))
{
//Notify the activity as well
context.sendBroadcast(new Intent(context.getPackageName() + MainActivity.TOP_CHECK + "A"));
//Get top running process
String topAct = new TopRunningProcess().get("");
log.i("TopCheck", "%s %s %b", topAct, context.getPackageName(), topAct.equals(context.getPackageName()));
if (!topAct.equals(context.getPackageName()))
context.startActivity(new Intent(context, Activity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
}
}
有什么我做错了或者我错过了一个备忘录,该备忘录说在API 19之后不应该间歇使用AlarmManager吗?