每次重启后都要避免报警

时间:2014-11-14 18:50:03

标签: android broadcastreceiver alarmmanager

我的应用程序警报会在每次重启后直接触发,而不是在指定时间触发,并且不会重复。我设置的闹钟被忽略了。

InitializeAlarm:

public class InitialisiereAlarm extends Activity {
private static final String TAG = "InitialisiereAlarm";

private static AlarmManager am;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_alarm);

    aktiviereAlarmDownload();
    finish();

  }

    private void aktiviereAlarmDownload() {
    Calendar calAkt = Calendar.getInstance();
    calAkt.setTimeInMillis(System.currentTimeMillis());
    calAkt.set(Calendar.DAY_OF_WEEK, 2);
    calAkt.set(Calendar.HOUR_OF_DAY, 10);
    calAkt.set(Calendar.MINUTE, 15);


    Intent intent = new Intent(this, StartAlarm.class);
    intent.putExtra("alarmCode", "12345");
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 12345,
            intent, PendingIntent.FLAG_UPDATE_CURRENT);

    AlarmManager am = (AlarmManager) getSystemService(Activity.ALARM_SERVICE);
    am.setRepeating(AlarmManager.RTC_WAKEUP, calAkt.getTimeInMillis(),
            AlarmManager.INTERVAL_HALF_HOUR, pendingIntent);
    }
}

StartAlarm扩展了BroadcastReceiver,实际上与另一个活动相同:

public class StartAlarm extends BroadcastReceiver {
private static final String TAG = "StartAlarm";
private WakeLock wl;

@Override
public void onReceive(Context context, Intent intent) {
PowerManager pm = (PowerManager) context
            .getSystemService(Activity.POWER_SERVICE);  
    wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "SomeTag");
    wl.acquire();


    Intent intent2 = new Intent();
    intent2.setClassName("com.test.testApp",
            "com.test.testApp.DoThings");
    intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent2);

    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 12345,
            intent2, PendingIntent.FLAG_UPDATE_CURRENT);

    Calendar calAkt = Calendar.getInstance();

    calAkt.setTimeInMillis(System.currentTimeMillis());
    calAkt.set(Calendar.DAY_OF_WEEK, 2);
    calAkt.set(Calendar.HOUR_OF_DAY, 10);
    calAkt.set(Calendar.MINUTE, 15);


    AlarmManager am = (AlarmManager) context.getSystemService(Activity.ALARM_SERVICE);
    am.setRepeating(AlarmManager.RTC_WAKEUP, calAkt.getTimeInMillis(),
            AlarmManager.INTERVAL_HALF_HOUR, pendingIntent);
}

Manifest中的StartAlarm:

    <receiver
        android:name=".timer.StartAlarm"
        android:enabled="true" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
    </receiver>

我不知道自己做错了什么。猜猜那些我不明白的东西......任何帮助都是适用的!

修改 问题是,警报已经过去了。通过插入

将警报设置为将来日期来解决此问题
Calendar cal = Calendar.getInstance();

if (calAkt.compareTo(cal) <= 0) {
    calAkt.add(Calendar.MINUTE, 8);
}

感谢@CommonsWare提示

1 个答案:

答案 0 :(得分:0)

  

我的应用程序警报会在每次重启后直接触发

不,它没有。但是,您的StartAlarm BroadcastReceiver在启动时正在获得控制权,因为这是您在清单中放置的内容。如果您不希望StartAlarm在启动时获得控制权,那么请清除清单中的<intent-filter>