Android – DownloadManager / BroadcastReceiver llamado varias veces

Estoy usando un DownloadManager para manejar una descarga en mi aplicación, me gustaría notificar al usuario cuando se haya completado la descarga.

Estoy usando el siguiente código que está funcionando bien

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)); } 

El problema es que el método onReceive también se llama para descargas anteriores.

Digamos que descarga a.mp3, b.mp3 y c.mp3, cuando a.mp3 se completa recibo a.mp3 completado, cuando b.mp3 se completa recibo a.mp3 se completa, entonces una nueva tostada b.mp3 esta completado…

¿Cómo podría evitar esto? gracias.

Yo registra un BroadcastReceiver cada vez que descarga un archivo. Eso significa que, la segunda vez que descargue un archivo, tendrá dos receptores registrados. Probablemente debería anular su registro mediante unregisterReceiver() después de que el trabajo se realiza (probablemente en onReceive() ).

 long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0); Query query = new Query(); query.setFilterById(downloadId); Cursor cur = manager.query(query); if (cur.moveToFirst()) { int columnIndex = cur.getColumnIndex(DownloadManager.COLUMN_STATUS); if (DownloadManager.STATUS_SUCCESSFUL == cur.getInt(columnIndex)) { titleString=cur.getString(cur.getColumnIndex(DownloadManager.COLUMN_TITLE));} 

Usted debe utilizar esto para obtener su cadena de título para descargas individuales. Porque cada descarga tiene su propio id. Sé que la respuesta es demasiado tarde, pero puede ayudar a otros en el futuro …

  • Cómo jugar notas individuales de archivo midi en LibGDX?
  • Android: clickable = "true" significa que no se puede hacer clic?
  • Guardando una imagen grande en PNG
  • Android Speech Recognition API no funciona en Android 7 Nougat
  • Integración de jPCT con Vuforia / SDK de QCAR
  • Cómo hacer que el menú de opciones aparezca en la parte inferior de la pantalla de Android
  • Tabla con ancho de columna variable por fila (similar a UICollectionView para iOS)
  • ¿Cómo obtener los parámetros maxWidth y maxHeight de ImageView?
  • Cómo utilizar writeStringArray () y readStringArray () en una parcela
  • ¿Puede un dispositivo bluetooth 4.0 enviar datos a un dispositivo bluetooth 2.0?
  • Inyección de múltiples componentes independientes
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.