Ich verwende einen DownloadManager, um einen Download in meiner Anwendung zu verarbeiten, ich möchte den Benutzer benachrichtigen, wenn der Download abgeschlossen ist.Android - DownloadManager/BroadcastReceiver mehrmals aufgerufen
ich den Folowing Code verwenden, die gut
public void downloaddownload(View v){
View v2 = (View) v.getParent();
TextView urlView = (TextView) v2.findViewById(R.id.url);
String urlString = (String) urlView.getText().toString();
TextView artistView2 = (TextView) v2.findViewById(R.id.artist);
final String artistString = (String) artistView2.getText().toString();
TextView titleView2 = (TextView) v2.findViewById(R.id.title);
final String titleString = (String) titleView2.getText().toString();
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(urlString));
request.setDescription(titleString);
request.setTitle(artistString);
// in order for this if to run, you must use the android 3.2 to compile your app
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
}
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_MUSIC + "/folder", titleString + " - " + artistString + ".mp3");
Toast.makeText(mainContext, "Downloading " + titleString + " - " + artistString, Toast.LENGTH_SHORT).show();
// get download service and enqueue file
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);
onComplete = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Toast.makeText(mainContext, "Download \" " + titleString + " - " + artistString + "\" completed", Toast.LENGTH_LONG).show();
}
};
registerReceiver(onComplete, new IntentFilter(
DownloadManager.ACTION_DOWNLOAD_COMPLETE));
}
Das Problem arbeitet, ist, dass die OnReceive Methode zur bisherigen Downloads auch genannt wird. Nehmen wir an, ich lade a.mp3, b.mp3 und c.mp3 herunter, wenn a.mp3 fertig ist. Ich bekomme a.mp3 fertig, wenn b.mp3 fertig ist. Ich bekomme, dass a.mp3 fertig ist, dann ein neues Toast b.mp3 ist fertig ...
Wie kann ich das verhindern? Danke.
Es gibt auch Probleme mit Download Manager. Siehe auch http://stackoverflow.com/questions/10852821/downloadmanager-sends-status-successful-for-failed-download –
in Ihrem BroadcastReceiver onReceive Methode müssen Sie eine Registrierung wie Activity.this.unregister (this) – Gugelhupf