2016-08-05 6 views
0

Ich habe eine App, die Daten herunterlädt und sie in eine SQLite-Datenbank einfügt, wenn eine Benachrichtigung ausgegeben wird. Dies funktioniert gut, während die App verwendet wird, aber ich brauche es, wenn die App geschlossen ist.Ausführen von Aufgaben vom Broadcast-Empfänger bei geschlossener App [Android]

Ich habe eine BroadcastReceiver innerhalb eingerichtet, die aufgerufen wird, wenn die App geschlossen ist, aber ich bin mir nicht sicher, wie man es mit dem Hinzufügen zur Datenbank fortfahren kann. Hier

ist der Code, ich verwende:

AndroidManifest.xml

<manifest.... 

    <application... 

    <receiver android:name=".broadcast.PacksReceiver" > 
     <intent-filter> 
      <action android:name="ADD_PACK" > 
      </action> 
     </intent-filter> 
    </receiver> 

PacksReceiver

public class PacksReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    Log.d("PacksReceiver", "onReceive"); 

    String message = intent.getStringExtra("message"); 

    PacksActivity pa = new PacksActivity(); 
    pa.downloadPack(null, message); 
    } 
} 

PacksActivity

public void downloadPack(View v, String thisPackID){ 
    Log.d("download", "pack"); 
    //THIS LOG IS CALLED EVERYTIME 
    vRef = v; 
    if(vRef != null){ 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       onScreenProgressBar = (ProgressBar) vRef.findViewById(R.id.onScreenProgress); 
       onScreenProgressCircle = (ProgressBar) vRef.findViewById(R.id.onScreenProgressCircle); 
       dlPercent = (TextView) vRef.findViewById(R.id.dlPercent); 

       onScreenProgressCircle.setVisibility(View.VISIBLE); 

       onScreenProgressBar.setVisibility(View.VISIBLE); 
       onScreenProgressCircle.setProgress(0); 
      } 
     }); 
    } 
    if(thisPackID == null){ 
     thisPackID = pack_id; 
    } 

    String url = MyApp.getAppContext().getString(R.string.serverURL) + 
      MyApp.getAppContext().getString(R.string.getAppendixA) + "/" + thisPackID; 
    Intent appA_Intent = new Intent(Intent.ACTION_SYNC, null, this, DownloadService.class); 
    appA_Intent.putExtra("url", url); 
    appA_Intent.putExtra("onCreate", "false"); 
    appA_Intent.putExtra("receiver", downloadPackReceiver); 
    appA_Intent.putExtra("downloadType", "GET_APPENDIX_A"); 
    appA_Intent.putExtra("requestId", 101); 
    MyApp.getAppContext().startService(appA_Intent); 
} 

Antwort

1

den Service von

onReceive() 

Methode gestartet werden, da Sie mutiple Broadcast nacheinander bekommen.

0

Schreiben Sie den Code zum Hinzufügen von Daten in Ihrer Datenbank in Ihrer PackReciever Inside OnRecieve() -Methode, da Sie dort Push-Benachrichtigungen erhalten.

0

Keine Aktivität im Empfänger anrufen. Verwenden Sie stattdessen IntentService, um alle Pakete herunterzuladen. IntentService wird nach Abschluss der Arbeit automatisch beendet.

Überschreiben Sie die onHandleIntent() - Methode und laden Sie Pakete herunter und speichern Sie sie dort in der Datenbank.

Verwandte Themen