Uygulamamda, IntentService kullanarak arka planda kısa bir ağ isteğini kesen bir bildirim düğmem var. Burada bir GUI göstermenin bir anlamı yok, bu yüzden bir Etkinlik yerine hizmeti kullanıyorum. Aşağıdaki kodlara bakın.JobIntentService'ın PendingIntent'ten (Bildirim düğmesi) başlatılması?
// Build the Intent used to start the NotifActionService
Intent buttonActionIntent = new Intent(this, NotifActionService.class);
buttonActionIntent.setAction(NotifActionService.ACTION_SEND_CONFIRM);
buttonActionIntent.putExtra(NotifActionService.EXTRA_CONFIRM_ID, confirmId);
buttonActionIntent.putExtra(NotifActionService.EXTRA_NOTIF_ID, notifId);
// Build the PendingIntent used to trigger the action
PendingIntent pendingIntentConfirm = PendingIntent.getService(this, 0, buttonActionIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Bu güvenilir ama bana yerine JobIntentService taşımak istediğiniz yapılan Android 8.0 yeni arka plan kısıtlamalar ile çalışır. Servis kodunun güncellenmesi çok doğru görünüyor ancak Bildirim İşlemi'nin gerektirdiği bir PendingIntent ile nasıl başlatacağımı bilmiyorum.
Bunu nasıl başarabilirim?
Normal bir servise gidip PendingIntent.getForegroundService (...) API düzeylerinde 26+ ve geçerli kod API 25 ve sonraki sürümlerde kullanmak daha iyi olur mu? Bu wakelocks, iş parçacığı el ile işlemek ve Android 8.0+ üzerinde çirkin bir bildirim ile sonuçlanmasını gerektirir.
DÜZENLEME: Aşağıda, IntentService öğesinin JobIntentService'ye düz ileri dönüşümü yanında sona erdiğim kod yer almaktadır. sadece benim JobIntentService için niyet sınıfını değiştirir ve enqueueWork yöntemini çalıştırır
BroadcastReceiver:
public class NotifiActionReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
intent.setClass(context, NotifActionService.class);
NotifActionService.enqueueWork(context, intent);
}
}
orijinal kod
Modifiye sürümü:
// Build the Intent used to start the NotifActionReceiver
Intent buttonActionIntent = new Intent(this, NotifActionReceiver.class);
buttonActionIntent.setAction(NotifActionService.ACTION_SEND_CONFIRM);
buttonActionIntent.putExtra(NotifActionService.EXTRA_CONFIRM_ID, confirmId);
buttonActionIntent.putExtra(NotifActionService.EXTRA_NOTIF_ID, notifId);
// Build the PendingIntent used to trigger the action
PendingIntent pendingIntentConfirm = PendingIntent.getBroadcast(this, 0, buttonActionIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Evet, bu işe yarayabilir. Bir cevap vereceğim ve cevabımın hem eski hem de eski platformlardaki sorunumu gerçekten çözdüğünden emin olduktan sonra cevabınızı kabul edeceğim. – blunden
Başarılı oldunuz mu? Ve eğer evet ise, lütfen bir örnek gönderir misiniz? THX – tomseitz
@tomseitz Henüz denemedim, ancak şu ana kadar diğer değişikliklere odaklandım. Bu noktada Android O’yu hedeflemekten pek fazla faydalanamıyorum. Bunu yapmak istediğim şey daha çok, çünkü en son sürümü hedeflemeyi seviyorum. Aynı sorunu yaşıyor musunuz? – blunden