无法在 Android 上启动警报服务
Unable to start Alarm Service on Android
我正在尝试设置重复闹钟
AlarmReceiver.java
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "ALARM START SUCCESSFUL", Toast.LENGTH_SHORT).show();
}
}
在我的片段中,我调用这个
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, timePicker.getCurrentHour());
calendar.set(Calendar.MINUTE, timePicker.getCurrentMinute());
/* Repeating on every 20 minutes interval */
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
1000 * 60 * 20, pendingIntent);
其中 pendingIntent
设置为
alarmManager = (AlarmManager)(getActivity().getSystemService(Context.ALARM_SERVICE));
Intent intent = new Intent("FIRE_ALARM");
pendingIntent=PendingIntent.getBroadcast(getActivity(), MONDAY, intent, 0);
只有当当前时间小于timePicker时间时,点击设置闹钟按钮才会出现Toast。
AndroidManifest.xml
<receiver android:name="AlarmReceiver">
<intent-filter>
<action android:name="FIRE_ALARM"/>
</intent-filter>
</receiver>
从 API 级别 19 开始 setRepeating()
将不再在准确时间触发。您可以改为执行以下操作:
public class AlarmReceiver extends BroadcastReceiver {
public static synchronized void startAlarm() {
AlarmManager alarmManager =
(AlarmManager) ApplicationContext.getContext().getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent("FIRE_ALARM");
PendingIntent pendingIntent =
PendingIntent.getBroadcast(ApplicationContext.getContext(), 1, intent, 0);
// ...
if (Build.VERSION.SDK_INT >= 19)
alarmManager.setExact(AlarmManager.RTC_WAKEUP, interval, pendingIntent);
else
alarmManager.set(AlarmManager.RTC_WAKEUP, interval, pendingIntent);
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("FIRE_ALARM")) {
// do stuff
startAlarm();
}
}
}
然后从主 activity.
调用 AlarmReceiver.startAlarm()
我正在尝试设置重复闹钟
AlarmReceiver.java
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "ALARM START SUCCESSFUL", Toast.LENGTH_SHORT).show();
}
}
在我的片段中,我调用这个
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, timePicker.getCurrentHour());
calendar.set(Calendar.MINUTE, timePicker.getCurrentMinute());
/* Repeating on every 20 minutes interval */
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
1000 * 60 * 20, pendingIntent);
其中 pendingIntent
设置为
alarmManager = (AlarmManager)(getActivity().getSystemService(Context.ALARM_SERVICE));
Intent intent = new Intent("FIRE_ALARM");
pendingIntent=PendingIntent.getBroadcast(getActivity(), MONDAY, intent, 0);
只有当当前时间小于timePicker时间时,点击设置闹钟按钮才会出现Toast。
AndroidManifest.xml
<receiver android:name="AlarmReceiver">
<intent-filter>
<action android:name="FIRE_ALARM"/>
</intent-filter>
</receiver>
从 API 级别 19 开始 setRepeating()
将不再在准确时间触发。您可以改为执行以下操作:
public class AlarmReceiver extends BroadcastReceiver {
public static synchronized void startAlarm() {
AlarmManager alarmManager =
(AlarmManager) ApplicationContext.getContext().getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent("FIRE_ALARM");
PendingIntent pendingIntent =
PendingIntent.getBroadcast(ApplicationContext.getContext(), 1, intent, 0);
// ...
if (Build.VERSION.SDK_INT >= 19)
alarmManager.setExact(AlarmManager.RTC_WAKEUP, interval, pendingIntent);
else
alarmManager.set(AlarmManager.RTC_WAKEUP, interval, pendingIntent);
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("FIRE_ALARM")) {
// do stuff
startAlarm();
}
}
}
然后从主 activity.
调用 AlarmReceiver.startAlarm()