Selamlar,
Uzun zamandır üstünde çalıştığım ve yavaş yavaş sonuç almaya başladığım bir durum hakkında sizlere bir sorum olacak. Araştırmalarım sonucu bir ana uygulama tam olarak kapatılırsa servis gerekli işlemleri yapmamakta. Buna istinaden Java tetikleyiciler araya girmekte ve işlevi yerine getirmekte. Bu durum hakkında bu gece üzerinde durdum ve 2 saatlik çalışma sonucunda uygulamayı kapatınca(bir butona basarak kodu tetikliyorum) uygulama 30 sn sonra tekrar açmayı başardım. Lakin aklıma bir soru takıldı, tahminimce bu olay sadece "AlarmManager" adlı modülden yararlanarak yapılmakta çünkü AndroidManifest bölümünde gerekli düzenlemeler istedi(receive konusunda). Şimdi sorum şu ben bu uygulamayı "AlarmManager" yapısından bağımsız sadece belirlediğim bir fonksiyonu arka planda nasıl sorgulamalıyım? Daha doğrusu yazdığım kodda nasıl bir düzenlemeye gitmeliyim?
Button1 kodları, kodlar "getTimeAfterInSecs" fonksiyonu ile 30 saniye içinde programı tekrar tetiklemekte.
procedure TForm1.Button1Click(Sender: TObject);
var
Intent: JIntent;
PendingIntent: JPendingIntent;
begin
Intent := TJIntent.Create;
Intent.setClassName(TAndroidHelper.Context, StringToJString('com.TestReceiver.AlarmReceiver'));
PendingIntent := TJPendingIntent.JavaClass.getBroadcast(TAndroidHelper.Context, 1, Intent, 0);
TAndroidHelper.AlarmManager.&set(TJAlarmManager.JavaClass.RTC_WAKEUP, getTimeAfterInSecs(30),
PendingIntent);
end;
"getTimeAfterInSecs" fonksiyonu
function getTimeAfterInSecs(Seconds: Integer): Int64;
var
Calendar: JCalendar;
begin
Calendar := TJCalendar.JavaClass.getInstance;
Calendar.add(TJCalendar.JavaClass.SECOND, Seconds);
Result := Calendar.getTimeInMillis;
end;
İyi çalışmalar 🙂