AlarmReceiver从不接收来自Fragment的呼叫

时间:2017-05-01 17:29:04

标签: java android android-fragments alarmmanager

我正在尝试在片段中设置闹钟。

AlarmManager manager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);

Intent alarmIntent = new Intent(getActivity(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getService(getActivity(), 0, alarmIntent, 0);

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 19);
calendar.set(Calendar.MINUTE, 23);

manager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 3600, pendingIntent);

我的AlarmReceiver类是:

public class AlarmReceiver extends BroadcastReceiver {
    private static final String TAG = "MainFragment";
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(TAG, "onReceive");
        Toast.makeText(context, "I'm running", Toast.LENGTH_LONG).show();
    }
}

此日志和烤面包从不显示。

在我的AndroidManifest中,我放了

<receiver android:name=".AlarmReceiver"
            android:enabled="true"
            android:exported="true"></receiver>

我错过了什么吗?这是我在Android上的第一个项目,所以它可能是一个新手的错误。

3 个答案:

答案 0 :(得分:2)

以下是正在运行TESTED的示例:

AlarmManager manager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);

Intent alarmIntent = new Intent(this.getApplicationContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 30);

manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 3600, pendingIntent);

如果它不起作用我可以发给你我做的工作项目。

答案 1 :(得分:1)

您正在使用PendingIntent.getService(...),而不是与BroadcastReceiver等效的PendingIntent.getBroadcast(...)。这可能是个问题。

答案 2 :(得分:-1)

确保如果您设置一次警报(例如在应用程序首次启动时),并在等待时对代码进行一些更改并再次安装应用程序,您的待处理意图将不再处于活动状态,因此您需要再次设置警报。