0
매년 5 월 8 일과 5 월 12 일 사이에 한 번만 알림을 보내려합니다.알림을 설정하는 방법은 매년 한 번만 보내시겠습니까?
하지만 난 다른 년과 비교, 그것은 사용자가 응용 프로그램을 시작하거나 시간이
월 8 월 (12) 사이에 있다면 그것은의 많은 저를 혼동 있다고 재부팅 때 통지마다 시간을 보낼 것입니다 원인이 붙어 몇 시간 동안이 문제를 해결하는 방법을 가르쳐 줄 수 있습니다.
미리 감사드립니다.
내 매니페스트 :
//Setting
public void startAlarmSetting() {
Toast.makeText(this, "Starting setting", Toast.LENGTH_SHORT).show();
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
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 when user start application
SharedPreferences preferences = getSharedPreferences("time", MODE_PRIVATE);
preferences.edit().putLong("saveTime", time)
.putInt("saveFirstYear",2017)
.putInt("saveNextYear",year)
.putBoolean("saveBoolean",true)
.apply();
}
내 PlayReceiver : 내 주요 활동이 boolean
및 year
을 절약 할 수
<application>
<!-- -->
<receiver android:name=".AlarmSetting.PlayReceiver">
<intent-filter>
<action android:name="play_hskay" />
</intent-filter>
</receiver>
<!-- -->
<receiver android:name=".AlarmSetting.AlarmInitReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
코드 if (neverSend || !(firstYear == nextYear)){
의이 라인은 나에게
public class PlayReceiver extends BroadcastReceiver {
private Context context;
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Starting playReceiver TDU", Toast.LENGTH_SHORT).show();
Bundle bData = intent.getExtras();
// load current time
Calendar current = Calendar.getInstance();
//set first time
Calendar firstLimit = Calendar.getInstance();
firstLimit.set(Calendar.MONTH, 4);
firstLimit.set(Calendar.DAY_OF_MONTH, 8);
firstLimit.set(Calendar.HOUR, 12);
firstLimit.set(Calendar.MINUTE, 30);
firstLimit.set(Calendar.SECOND, 30);
//set second time
Calendar secondLimit = Calendar.getInstance();
secondLimit.set(Calendar.MONTH, 4);
secondLimit.set(Calendar.DAY_OF_MONTH, 12);
secondLimit.set(Calendar.HOUR, 12);
secondLimit.set(Calendar.MINUTE, 30);
secondLimit.set(Calendar.SECOND, 30);
SharedPreferences preferences = context.getSharedPreferences("time", context.MODE_PRIVATE);
boolean neverSend = preferences.getBoolean("saveBoolean",false);
//int firstYear = preferences.getInt("saveFirstYear",0);
int firstYear = 2017;
int nextYear = preferences.getInt("saveNextYear",0);
//neverSend will be true when first time.
if (neverSend || !(firstYear == nextYear)){
if (current.after(firstLimit) && current.before(secondLimit)) {
if (bData.get("msg").equals("play_hskay")) {
sendNotification();
//change the nextYear and save it.
Calendar calendar=Calendar.getInstance();
int sendYear = calendar.get(Calendar.YEAR);
preferences.edit().putInt("saveNextYear",sendYear).putBoolean("saveBoolean",false)
.apply();
}
} else {
Toast.makeText(context, "out of the period", Toast.LENGTH_LONG).show();
}
}
}
혼란 내 AlarmInitRec eiver :
public class AlarmInitReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Start~~~~TDU", Toast.LENGTH_LONG).show();
SharedPreferences preferences = context.getSharedPreferences("time", context.MODE_PRIVATE);
long setTime = preferences.getLong("saveTime", 0);
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);
}
}
아마도 이것은 사용자가 애플리케이션을 시작할 때마다'.putBoolean ("saveBoolean", true)'을 수행했기 때문일 것입니다. –
죄송합니다. 다른 문제를 생각 나게하겠습니다. (해결책을 찾으려고 노력 중입니다. 지금 사용해보십시오. http://stackoverflow.com/questions/15061653/run-a-piece-of-code-only-once- 응용 프로그램이 설치되었을 때 –
감사합니다 Andrii, 당신이 나에게 또 다른 문제를 상기시켜 주었고, 지금 그 링크에서 해결책을 찾았습니다. –