我的問題是當我設置2分鐘後的時間是10:02,當我重新啓動設備多次,可能是時間是10:03或10:04或10:05,我的通知每次總是顯示出來。AlarmManager設置失敗
我希望我的通知只在10:02後顯示一次,alarmManager是不是可以將它用於系統?
如果是這樣,我該如何避免這個問題?任何幫助將不勝感激。
我用了alarmManager,SharePreferenes,BroadcastReceiver。
我MainActivity按鈕功能:
public void onClickSetup(View view)
{
Toast.makeText(this,"Starting setting",Toast.LENGTH_SHORT).show();
Calendar cal = Calendar.getInstance();
// after 2 minutes
cal.add(Calendar.MINUTE, 2);
Intent intent = new Intent(this, PlayReceiver.class);
intent.putExtra("msg", "play_hskay");
PendingIntent pi = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pi);
long time=cal.getTimeInMillis();
//Save the time for future
SharedPreferences preferences=getSharedPreferences("time",MODE_PRIVATE);
preferences.edit().putLong("saveTime",time)
.apply();
}
我給通知接收機:
public class PlayReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bData = intent.getExtras();
if (bData.get("msg").equals("play_hskay")) {
Intent notificationIntent = new Intent(context, MainActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addParentStack(MainActivity.class);
stackBuilder.addNextIntent(notificationIntent);
PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
inboxStyle.addLine("message");
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context);
Notification notification;
notification = mBuilder.setSmallIcon(R.drawable.heart).setTicker("title").setWhen(0)
.setAutoCancel(true)
.setContentTitle("title")
//.setContentIntent(resultPendingIntent)
//.setSound(alarmSound)
.setStyle(inboxStyle)
//.setWhen(getTimeMilliSes(timeStamp))
.setSmallIcon(R.mipmap.ic_launcher)
//.setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), icon))
.setContentText("title")
.setContentIntent(pendingIntent)
.build();
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0 , notification);
}
}
}
我給重新啓動接收機的設備:
public class AlarmInitReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"Start~~~~",Toast.LENGTH_LONG).show();
// load system time for now. May be is 10:03、10:04、10:05
long current = Calendar.getInstance().getTimeInMillis();
// load the time when i set it before.
SharedPreferences preferences = context.getSharedPreferences("time", context.MODE_PRIVATE);
long setTime = preferences.getLong("saveTime", 0);
Toast.makeText(context,"Enter receiver setting",Toast.LENGTH_LONG).show();
Intent intentForSetTime = new Intent(context, PlayReceiver.class);
intentForSetTime.putExtra("msg", "play_hskay");
PendingIntent pi = PendingIntent.getBroadcast(context, 1, intentForSetTime, PendingIntent.FLAG_ONE_SHOT);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, setTime, pi);//setTime suppose is 10:02
}
}
我的清單爲廣播:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<receiver android:name=".PlayReceiver">
<intent-filter>
<action android:name="play_hskay" />
</intent-filter>
</receiver>
<receiver android:name=".AlarmInitReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
您需要重置設備重啓完成時的所有報警。 – user1140237
如何重置所有警報?你能給我看一些例子嗎? –