Autore Topic: Problema Background service con Oreo  (Letto 120 volte)

Offline morriluca

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xperia Play
  • Sistema operativo:
    Windows xp
Problema Background service con Oreo
« il: 03 Febbraio 2018, 18:25:42 CET »
0
Buongiorno, ho creato un'app che deve costantemente ricevere da un web service le previsioni metereologiche di alcune centraline.
Ho creato un servizio sempre attivo che si occupa di recuperare queste informazioni.
Funziona tutto correttamente, con android 8.0 il sistema non funziona..
Con Oreo non funziona la seguente istruzione
Codice (Java): [Seleziona]
Intent intent = new Intent("com.morriluca.pigsforecast.END_CHECK_SERVICE");  sendBroadcast(intent);che mi permette di mantenere sempre attivo il servizio.
Ricevo inoltre il seguente codice di errore:
Codice (Java): [Seleziona]
W/BroadcastQueue: Background execution not allowed: receiving Intent { act=com.morriluca.pigsforecast.END_CHECK_SERVICE flg=0x10 } to com.morriluca.pigsforecast/.StartupVi posto il codice

Codice (Java): [Seleziona]
public class Startup extends BroadcastReceiver {
    public Startup(){
    }
    @Override
    public void onReceive(Context context, Intent intent) {
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) {
            context.startForegroundService(new Intent(context, CheckPrevisioniService.class));
        } else {
            context.startService(new Intent(context, CheckPrevisioniService.class));
        }
    }
}

Codice (Java): [Seleziona]
public class CheckPrevisioniService extends Service {


    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        in_azione = false;
        super.onStartCommand(intent, flags, startId);
        startTimer();
        return START_STICKY;
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
   



    public void startTimer() {
        mTimer = new Timer();
        initializeTimerTask();
        tempo= 30;        
        mTimer.schedule(timerTask, tempo*1000, tempo*1000);
    }


    public void initializeTimerTask() {
        timerTask = new TimerTask() {
            public void run() {
                try {                  
                   cercaPrevisioni();                  
                }catch (Exception e){                  
                }
            }
        };
    }


    @Override
    public void onDestroy() {
        super.onDestroy();
        Intent intent = new Intent("com.morriluca.pigsforecast.END_CHECK_SERVICE");
        sendBroadcast(intent);

    }




    public void cercaPrevisioni(){
        ....
    }


Codice (Java): [Seleziona]
<service
            android:name=".CheckPrevisioniService"
            android:permission="android.permission.BIND_JOB_SERVICE"
            android:exported="false" />

        <receiver
            android:name=".Startup">

            <!-- This intent filter receives the boot completed event -->
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="com.morriluca.pigsforecast.END_CHECK_SERVICE" />
            </intent-filter>
        </receiver>

















Offline berpao

  • Utente junior
  • **
  • Post: 116
  • Respect: +9
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Play Store ID:
    Paolo Bersan
Re:Problema Background service con Oreo
« Risposta #1 il: 05 Febbraio 2018, 08:19:06 CET »
0
Ciao, non sono un esperto di background service quindi ti attacco un link ad un articolo dove spiega il tuo problema (che a quanto pare sono limitazioni inserite in android oreo) e qualche soluzione da quello che ho visto. E' in inglese, ma mi sembra facilmente comprensibile.
Ciao
P

https://medium.com/exploring-android/exploring-background-execution-limits-on-android-oreo-ab384762a66c