Android Alarmmanager 重复不需要的
Android Alarmmanager repeats unwanted
我想将 AlarmManager 设置为每 24 小时重复一次,但我的代码不起作用。
我在 MainActivity 中设置了 AlarmManager 以使用向 MainActivity 发送 Intent 的 AlarmReceiver 触发弹出通知。
我还检查 AlarmManger 是否已设置,但是当我不使用代码中 (###) 未注释的 alarmIntent2 时,它 returns 始终为 false。
如果我使用 alarmIntent2 然后我没有收到通知,则 AlarmManager 没有正确设置。
每次调用 MainActivity 时,都会重新设置 AlarmManager。
我做错了什么?
谢谢
MainActivity.class
MainActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent myIntent = this.getIntent();
if(myIntent.getExtras() != null) {
String nid = myIntent.getExtras().containsKey("nid") ? myIntent.getExtras().getString("nid") : "-";
if(nid.equals("1234")) {
startFragmentActivityToShowMessage();
}
else {
addNotification();
}
}
}
private void addNotification() {
boolean alarmUp = false;
alarmUp = (PendingIntent.getBroadcast(this, 0,
new Intent("com.mypackage.AlarmReceiver.class"),
PendingIntent.FLAG_NO_CREATE) != null);
if(!alarmUp) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 8);
calendar.set(Calendar.MINUTE, 15);
calendar.set(Calendar.SECOND, 01);
Intent alarmIntent = new Intent(this, com.mypackage.AlarmReceiver.class);
// (###) Intent alarmIntent2 = new Intent("com.mypackage.AlarmReceiver.class"); (###)
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 60* 24, pendingIntent);
}
}
好的。我解决了。
中的意图
PendingIntent.getBroadcast(this, 0, alarmIntent,..)
必须以同样的方式创建。然后我可以检查 AlarmManager 是否已经设置。那解决了问题。
示例:
Intent alarmIntent = new Intent(MainActivity.this, AlarmReceiver.class);
或
Intent alarmIntent = new Intent("com.mypackage.AlarmReceiver.class");
通过这种方式在下方签入工作正常。
Intent alarmIntent = new Intent(MainActivity.this, AlarmReceiver.class);
boolean alarmUp = false;
alarmUp = (PendingIntent.getBroadcast(this, 0,
alarmIntent,
PendingIntent.FLAG_NO_CREATE) != null);
和
Intent alarmIntent = new Intent(MainActivity.this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 60* 24, pendingIntent);
具有完全限定包名称的第二种方法我还没有测试过,但我认为它应该可以工作。
我想将 AlarmManager 设置为每 24 小时重复一次,但我的代码不起作用。
我在 MainActivity 中设置了 AlarmManager 以使用向 MainActivity 发送 Intent 的 AlarmReceiver 触发弹出通知。
我还检查 AlarmManger 是否已设置,但是当我不使用代码中 (###) 未注释的 alarmIntent2 时,它 returns 始终为 false。 如果我使用 alarmIntent2 然后我没有收到通知,则 AlarmManager 没有正确设置。
每次调用 MainActivity 时,都会重新设置 AlarmManager。
我做错了什么? 谢谢
MainActivity.class
MainActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent myIntent = this.getIntent();
if(myIntent.getExtras() != null) {
String nid = myIntent.getExtras().containsKey("nid") ? myIntent.getExtras().getString("nid") : "-";
if(nid.equals("1234")) {
startFragmentActivityToShowMessage();
}
else {
addNotification();
}
}
}
private void addNotification() {
boolean alarmUp = false;
alarmUp = (PendingIntent.getBroadcast(this, 0,
new Intent("com.mypackage.AlarmReceiver.class"),
PendingIntent.FLAG_NO_CREATE) != null);
if(!alarmUp) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 8);
calendar.set(Calendar.MINUTE, 15);
calendar.set(Calendar.SECOND, 01);
Intent alarmIntent = new Intent(this, com.mypackage.AlarmReceiver.class);
// (###) Intent alarmIntent2 = new Intent("com.mypackage.AlarmReceiver.class"); (###)
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 60* 24, pendingIntent);
}
}
好的。我解决了。
中的意图PendingIntent.getBroadcast(this, 0, alarmIntent,..)
必须以同样的方式创建。然后我可以检查 AlarmManager 是否已经设置。那解决了问题。
示例:
Intent alarmIntent = new Intent(MainActivity.this, AlarmReceiver.class);
或
Intent alarmIntent = new Intent("com.mypackage.AlarmReceiver.class");
通过这种方式在下方签入工作正常。
Intent alarmIntent = new Intent(MainActivity.this, AlarmReceiver.class);
boolean alarmUp = false;
alarmUp = (PendingIntent.getBroadcast(this, 0,
alarmIntent,
PendingIntent.FLAG_NO_CREATE) != null);
和
Intent alarmIntent = new Intent(MainActivity.this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 60* 24, pendingIntent);
具有完全限定包名称的第二种方法我还没有测试过,但我认为它应该可以工作。