0
我試圖在上午7點設置報警並且每天進行消防通知。 但我面臨的問題,我在一天內得到通知數次 請幫我每天使用AlarmManger的火災通知android
這裏是我的代碼:
public void startAlert() {
Intent myIntent = new Intent(ReminderActivity.this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(ReminderActivity.this, 0, myIntent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Calendar firingCal = Calendar.getInstance();
Calendar currentCal = Calendar.getInstance();
if (Prefs.getInt("HOURS", 0) == 0) {
firingCal.set(Calendar.HOUR_OF_DAY, 07);
firingCal.set(Calendar.MINUTE, 00);
firingCal.set(Calendar.SECOND, 0);
firingCal.set(Calendar.AM_PM, Calendar.AM);
} else {
firingCal.set(Calendar.HOUR_OF_DAY, Prefs.getInt("HOURS", 0));
firingCal.set(Calendar.MINUTE, Prefs.getInt("MINUTES", 0));
firingCal.set(Calendar.SECOND, 0);
if (hour < 12) {
firingCal.set(Calendar.AM_PM, Calendar.AM);
} else {
firingCal.set(Calendar.AM_PM, Calendar.PM);
}
}
long intendedTime = firingCal.getTimeInMillis();
long currentTime = currentCal.getTimeInMillis();
if (intendedTime >= currentTime) {
// you can add buffer time too here to ignore some small differences in milliseconds
// set from today
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, intendedTime, AlarmManager.INTERVAL_DAY, pendingIntent);
} else {
// set from next day
// you might consider using calendar.add() for adding one day to the current day
firingCal.add(Calendar.DAY_OF_MONTH, 1);
intendedTime = firingCal.getTimeInMillis();
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, intendedTime, AlarmManager.INTERVAL_DAY, pendingIntent);
}
}
廣播接收器類
public class AlarmReceiver extends BroadcastReceiver {
int MID = 0;
String notificationDesc = "";
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if (Prefs.getString("LOCAL_NOTI", "").equalsIgnoreCase("0")) {
return;
}
long when = System.currentTimeMillis();
if (!Prefs.getBoolean("TODAY_NOTI", false)) {
return;
}
NotificationManager notificationManager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
Intent notificationIntent = new Intent(context, HomeScreen.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder mNotifyBuilder = new NotificationCompat.Builder(
context).setSmallIcon(getNotificationIcon())
.setContentTitle("Yoga App")
.setContentText("Did you do yoga today ?").setSound(alarmSound)
.setAutoCancel(true).setWhen(when)
.setContentIntent(pendingIntent).setColor(ContextCompat.getColor(context, R.color.colorPrimary))
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_notification_icon)).setStyle(new NotificationCompat.BigTextStyle().bigText(notificationDesc))
.setVibrate(new long[]{1000, 1000, 1000, 1000, 1000});
notificationManager.notify(MID, mNotifyBuilder.build());
MID++;
}
這裏是清單文件:
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
<receiver android:name="Class name" android:enabled="true" android:exported="false" android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.REBOOT"/>
<action android:name="android.intent.action.TIME_SET" />
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
HOUR_OF_DAY使用24小時制,您的HOUR sharedPreference是在12或24小時內進入嗎? –
是的,它的12小時 – ajit
嘗試將Calendar.HOUR_OF_DAY設置爲Calendar.HOUR –