Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


BroadcastReceiver no recibe la acción completa de descarga

Estoy intentando capturar eventos completos de descarga, pero mi BroadcastReceiver no los está recibiendo. Aquí está el receptor:

public class DownloadListenerService extends BroadcastReceiver { @Override public void onReceive(final Context context, Intent intent) { System.out.println("got here"); SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences.Editor editor = settings.edit(); String action = intent.getAction(); if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) { String downloadPath = intent.getStringExtra(DownloadManager.COLUMN_URI); editor.putString("downloadPath", downloadPath); editor.commit(); } } } 

Aquí está el manifiesto:

 <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <receiver android:name="com.example.alreadydownloaded.DownloadListenerService" android:exported="true"> <intent-filter> <action android:enabled="true" android:name="android.intent.action.DOWNLOAD_COMPLETE" /> </intent-filter> </receiver> </application> 

¿Alguien ve lo que está mal?

  • Android: Consulta del registro de llamadas después de que se haya actualizado una vez que termina una llamada
  • Anular el registro de Android Broadcast Receiver en onReceive lanza "Receptor no registrado"
  • Recepción de paquetes de instalación y desinstalación de eventos
  • ¿Por qué llamar a setResult en BroadcastReceiver?
  • Direccionamiento explícito de una intención a un receptor de difusión dinámica
  • ¿Hay alguna manera de recibir una notificación cuando el usuario apaga el dispositivo?
  • Cómo identificar la llamada entrante y la llamada saliente en android
  • Android - ¿Cuándo registrar / cancelar la inscripción de los receptores de difusión creados en una actividad?
  • 5 Solutions collect form web for “BroadcastReceiver no recibe la acción completa de descarga”

    1-) utilizar el nombre completo del paquete para su receptor, por ejemplo: com.example.DownloadListenerService

    2-) añadir android: exportado = "verdadero" receptor de difusión puede recibir mensajes de fuentes fuera de su aplicación

    3-) cambiar el nombre de la acción en el filtro de intenciones a "android.intent.action.DOWNLOAD_COMPLETE"

     <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <receiver android:name="com.example.DownloadListenerService" android:exported="true" > <intent-filter> <action android:name="android.intent.action.DOWNLOAD_COMPLETE" /> </intent-filter> </receiver> <uses-permission android:name="android.permission.INTERNET" /> </application> 

    Solo recibiste la emisión si la solicitud era de tu aplicación, así que ejecuta este código dentro de tu aplicación y ver si el receptor se activa

     DownloadManager dm= (DownloadManager) getSystemService(DOWNLOAD_SERVICE); DownloadManager.Request request = new DownloadManager.Request(Uri.parse("https://www.google.com.tw/images/srpr/logo4w.png")); dm.enqueue(request); 

    Creo que el nombre de la acción en tu XML es incorrecto. Los documentos indican que el correcto es: android.intent.action.DOWNLOAD_COMPLETE no DownloadManager.ACTION_DOWNLOAD_COMPLETE – necesitas usar la constante, no el formulario de Java.

     <receiver android:name=".DownloadListenerService" > <intent-filter> <action android:enabled="true" android:name="android.intent.action.DOWNLOAD_COMPLETE" /> </intent-filter> </receiver> 
      <receiver android:name=".BroadCast_Service.Download_BroadCast" android:exported="true"> <intent-filter android:priority="1099"> <action android:name="android.intent.action.DOWNLOAD_COMPLETE" /> </intent-filter> </receiver> 

    Creo que está llamando al servicio DownloadManger desde IntentService / Service. Si es así, quítelo de allí y póngalo en actividad.

    Agregar permiso en el manifiesto android

      <uses-permission android:name="android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS" /> 

    Si la descarga se basa en tu aplicación, ¿necesitas enviar una emisión?

     Intent i = new Intent(); i.setAction(DownloadManager.ACTION_DOWNLOAD_COMPLETE); sendBroadcast(i); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.