我正在尝试在片段中设置闹钟。
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上的第一个项目,所以它可能是一个新手的错误。
答案 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)
确保如果您设置一次警报(例如在应用程序首次启动时),并在等待时对代码进行一些更改并再次安装应用程序,您的待处理意图将不再处于活动状态,因此您需要再次设置警报。