2016-04-26 31 views
0

Ich benutze diese Bibliothek, die eine nette Fortschrittsleiste für Uploads anzeigt. https://github.com/gotev/android-upload-serviceUploadServiceBroadcastReceiver wird beendet, wenn die Aktivität beendet ist

die Dokumentation Nach mir ein BroadcastReceiver jedoch hinzugefügt, wenn der Upload als Dienst ausgeführt und schön aktualisiert:

enter image description here

Wenn der Benutzer, bei dem die Aktivität schließt die broadcastReceiver sie erklärt wurde die Fähigkeit verlieren, am Ende des Uploads zu antworten. Was kann ich tun, um den Verweis auf den BroadcastReceiver beizubehalten?

Hinweis: Ich habe versucht, den Empfänger in eine separate Singleton-Klasse zu verschieben, aber dies hat das Problem nicht gelöst.

Die broadcastReceiver:

public final UploadServiceBroadcastReceiver uploadReceiver = 
     new UploadServiceBroadcastReceiver() { 

      // you can override this progress method if you want to get 
      // the completion progress in percent (0 to 100) 
      // or if you need to know exactly how many bytes have been transferred 
      // override the method below this one 
      @Override 
      public void onProgress(String uploadId, int progress) { 
       Log.i(TAG, "The progress of the upload with ID " 
         + uploadId + " is: " + progress); 
      } 

      @Override 
      public void onProgress(final String uploadId, 
            final long uploadedBytes, 
            final long totalBytes) { 
       Log.i(TAG, "Upload with ID " + uploadId + 
         " uploaded bytes: " + uploadedBytes 
         + ", total: " + totalBytes); 
      } 

      @Override 
      public void onError(String uploadId, Exception exception) { 
       Log.e(TAG, "Error in upload with ID: " + uploadId + ". " 
         + exception.getLocalizedMessage(), exception); 


      } 

      @Override 
      public void onCompleted(String uploadId, 
            int serverResponseCode, 
            byte[] serverResponseBody) { 
       // At this point, the serverResponseBody has been completely downloaded 
       // and is cached in memory, so no NetworkOnMainThread could happen here 
       Log.i(TAG, "Upload with ID " + uploadId 
         + " has been completed with HTTP " + serverResponseCode 
         + ". Response from server: " 
         + new String(serverResponseBody)); 

       String response = new String(serverResponseBody); 

       dialog.dismiss(); 


       //If your server responds with a JSON, you can parse it 
       //from serverResponseBody using a library 
       //such as org.json (embedded in Android) or Google's gson 
      } 

      @Override 
      public void onCancelled(String uploadId) { 
       Log.i(TAG, "Upload with ID " + uploadId 
         + " has been cancelled by the user"); 


      } 
     }; 

Antwort

0

Sie eine neue Klasse erstellen können (zB MyReceiver), die UploadServiceBroadcastReceiver erstreckt, fügen Sie darin Ihre Geschäftslogik und es dann als Rundfunkempfänger in Ihrem Manifest registrieren (wie gezeigt unten), mit dem Intent-Filter "com.yourcompany.yourapp.uploadservice.broadcast.status". Auf diese Weise können Sie unabhängig von Ihren Aktivitäten und Diensten auf Ereignisse warten. Ändern com.yourcompany.yourapp mit dem, was Sie als UploadService.NAMESPACE in der Ersteinrichtung gesetzt haben:

in AndroidManifest.xml

<receiver android:name="MyReceiver"> 
    <intent-filter> 
     <action android:name="com.yourcompany.yourapp.uploadservice.broadcast.status" /> 
    </intent-filter> 
</receiver> 

MyReceiver.java

public class MyReceiver extends UploadServiceBroadcastReceiver { 
    @Override 
    public void onProgress(UploadInfo uploadInfo) { 
    // your code here 
    } 

    @Override 
    public void onCancelled(UploadInfo uploadInfo) { 
    // Context context = getReceiverContext(); 
    // your code here 
    } 

    @Override 
    public void onError(UploadInfo uploadInfo, Exception exception) { 
     // Context context = getReceiverContext(); 
     // your code here 
    } 

    @Override 
    public void onCompleted(UploadInfo uploadInfo, ServerResponse serverResponse) { 
    // Context context = getReceiverContext(); 
    // your code here 
    } 
} 

SEHR WICHTIG! Wenn Sie Ereignisse mit UploadServiceBroadcastReceiver behandeln möchten, rufen Sie die setDelegate-Methode nicht auf.

Mehr unter: https://github.com/gotev/android-upload-service/wiki/Monitoring%20upload%20status

Verwandte Themen