7 日後に繰り返しデータを投稿したい。これには、Alarm Manager の setRepeat メソッドを使用します。電話の再起動時にアラームがクリアされるためです。ブートレシーバーを使用して、アラームを再度設定します。
しかし、電話機が 6 日目に再起動され、アラームが再度設定された場合、アラームは 7 日目に鳴るはずではなく、6 + 7 日目に鳴ります。それに対する解決策はありますか??
下手な英語でごめんなさい。助けてください
7 日後に繰り返しデータを投稿したい。これには、Alarm Manager の setRepeat メソッドを使用します。電話の再起動時にアラームがクリアされるためです。ブートレシーバーを使用して、アラームを再度設定します。
しかし、電話機が 6 日目に再起動され、アラームが再度設定された場合、アラームは 7 日目に鳴るはずではなく、6 + 7 日目に鳴ります。それに対する解決策はありますか??
下手な英語でごめんなさい。助けてください
アラームを設定するときは、共有設定でトリガー時間を保存します。ブートレシーバーでアラームを再度設定しますが、この場合、トリガー時間は共有設定から取得されます。
あなたの AndroidManifest.xml で
<receiver android:name="com.Company.PackageName.BootCompletedReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
com.Company.PackageName.BootCompletedReceiver クラスで
public class BootCompletedReceiver extends BroadcastReceiver
{
private Context mContext;
private G9SharedPreferences oSharedPreferences;
private AlarmManager amSchedules;
@Override
public void onReceive(Context context, Intent intent)
{
this.mContext = context;
oSharedPreferences = new G9SharedPreferences(this.mContext);
try
{
vUpdateAlarmManager();
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
oSharedPreferences = null;
this.mContext = null;
}
}
@SuppressWarnings("deprecation")
public void vUpdateAlarmManager()
{
vCancelAlaramManager();
Date dCurrentDate = new Date(oSharedPreferences.GetLongPreferences(G9Constant.BACKUP_TIME, 0));
if(dCurrentDate.getTime() < new Date().getTime())
{
dCurrentDate.setDate(dCurrentDate.getDate() + 1);
}
vSetRepeatingAlarm(dCurrentDate);
}
public void vCancelAlaramManager()
{
Intent oIntent = new Intent(mContext, AlarmReceiver.class);
PendingIntent oPendingIntent = PendingIntent.getBroadcast(mContext, 0, oIntent, 0);
AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(oPendingIntent);
oPendingIntent.cancel();
}
public void vSetRepeatingAlarm(Date dScheduleTime)
{
amSchedules = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(mContext, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
amSchedules.setRepeating(AlarmManager.RTC_WAKEUP, dScheduleTime.getTime(), AlarmManager.INTERVAL_DAY , pendingIntent);
}
}