Broadcastreceiver未接收触发警报

时间:2011-10-06 07:59:23

标签: android broadcastreceiver alarmmanager

我有以下问题。我有2节课。 1称为AlarmService,另一个称为TimeAlarm,它扩展了BroadcastReceiver。 应用程序应该执行以下操作:它应该生成一个新的警报到首选项中指定的时间(它已经...)也在Logcat中我可以看到警报是如何被触发的。但问题是,应该显示的通知不会显示在StatusBar中。

以下是我对此的所有代码:

的AndroidManifest.xml:

<receiver android:name="com.ikalma.alarmmanager.TimeAlarm">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

AlarmService.java:

private Context context;
private PendingIntent mAlarmSender;

public AlarmService(Context context) {
    this.context = context;
    Intent notifyIntent = new Intent(Intent.ACTION_MAIN);
    notifyIntent.setClass(context, myActivity.class);
    mAlarmSender = PendingIntent.getBroadcast(context, 0, notifyIntent, 0);
}

public void startAlarm(int stunde, int minute) {
    Calendar updateTime = Calendar.getInstance();

    updateTime.set(Calendar.HOUR_OF_DAY, stunde);
    updateTime.set(Calendar.MINUTE, minute);
    updateTime.set(Calendar.SECOND, 00);

    AlarmManager am = (AlarmManager) context
            .getSystemService(Context.ALARM_SERVICE);
    am.setRepeating(AlarmManager.RTC_WAKEUP, updateTime.getTimeInMillis(),
            AlarmManager.INTERVAL_DAY, mAlarmSender);
}

TimeAlarm.java:

@Override
public void onReceive(Context context, Intent intent) {
    Log.e("TEST", "onReceive() called...");
}

清单中的接收器位于标签内部,因此不应该成为问题。 问题是,如果我重启我的设备,它会被调用。但是如果触发警报则不会。 但是如果触发了警报,也应该调用onReceive()方法,不是吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您的意图过滤器仅监听启动完成意图,而不是您自己的警报广播意图操作。更新您的意图过滤器,以便收到您的广播意图(这意味着您的特殊情况将Intent.ACTION_MAIN的操作添加到您的意图过滤器)

<receiver android:name="com.ikalma.alarmmanager.TimeAlarm">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <action android:name="android.intent.action.MAIN" />
    </intent-filter>
</receiver>