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


Más de un BroadcastReceiver para la misma intención con doc contradictorio y práctica

En la documentación de Google Analytics para Android tiene una nota que dice:

Nota: Sólo se puede especificar una clase BroadcastReceiver por aplicación. Si necesita incorporar dos o más BroadcastReceivers de SDKs diferentes, tendrá que crear su propia clase BroadcastReceiver que recibirá todas las emisiones y llamará a los BroadcastReceivers apropiados para cada tipo de difusión.

Aunque algo confuso no parece ser un solo elemento de verdad en esa declaración. En particular, puede tener múltiples receptores en una aplicación y funcionan bien. Otros lugares han interpretado esto para significar que usted no puede tener más de un receptor para una acción particular del intento. Sin embargo, en mis pruebas, incluyendo un dispositivo Tablet / 3.2, así como un dispositivo G1 / 1.6, veo que todos los receptores de broadcast para com.android.vending.INSTALL_REFERRER son efectivamente llamados.

He implementado un receptor que va a llamar a otros basados ​​en algunos config y fue la actualización que utilizan el PackageManager en su lugar y obtener las entradas del manifiesto, pero todo esto parece completamente innecesario.

Entonces, ¿cuál es la verdad? ¿Es el analítico doc un completo barril o hay algo de verdad detrás de la nota?

  • Android BroadcastReceiver dentro de la actividad
  • Iniciar actividad marcando un número
  • ¿Es posible escribir un receptor de difusión Android que detecte cuando el teléfono se despierta?
  • ¿Cómo se puede detectar el lanzamiento de una aplicación de Android?
  • Actualización del componente UI de actividad de Broadcast Receiver?
  • Actividad ha filtrado IntentReceiver
  • ¿Cuándo cancelar el registro de Broadcast Receiver registrado en onCreate?
  • ¿Dónde anular el registro de BroadcastReceiver (en un servicio)?
  • 3 Solutions collect form web for “Más de un BroadcastReceiver para la misma intención con doc contradictorio y práctica”

    Respondiendo a mi propia pregunta. El sistema Android funciona perfectamente bien con múltiples receptores para la misma intención. Se llamará a todos ellos como se esperaba.

    Android Market / Play Store / Finsky ha sido escrito deliberadamente para no usar la práctica estándar de Android y se asegura deliberadamente de que sólo se llama al primero. En consecuencia, tiene que realizar el multiplexado como se describe en la página de análisis y no confiar en las herramientas de comprobación de referencias.

    Este código en el método onReceive le permitirá encontrar todos los receptores.

    // clear out classname intent.setComponent(null); // do what Market/Store/Finsky should have done in the first place List<ResolveInfo> l=context.getPackageManager().queryBroadcastReceivers(intent, 0); 

    Luego busque en el applicationInfo en cada ResolveInfo, y use el nombre (después de verificar exportado y activado), y no se llame a ti mismo.

    He actualizado el probador de referencias para que coincida con el comportamiento de Market / Store y facilite la realización de pruebas de referencias de instalación. Consulte https://github.com/rogerbinns/referraltester

    No estoy seguro de entender lo que la advertencia en el documento de Google Analytics SDK se trata, pero sospecho que significan que no puede registrar la misma clase dos veces con filtros diferentes. Sin embargo, sé que puede tener múltiples receptores de difusión.

    Por ejemplo, no creo que esto funcione:

     <receiver android:name="com.sample.myapp.MyAnalyticsReceiver" android:exported="true"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER" /> </intent-filter> </receiver> <receiver android:name="com.sample.myapp.MyAnalyticsReceiver" android:exported="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> 

    Sin embargo sé que esto hace:

     <receiver android:name="com.sample.myapp.MyAnalyticsReceiver" android:exported="true"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> 

    Esto también funciona para instalar diferentes receptores que supervisan los mismos eventos de difusión:

     <receiver android:name="com.google.android.apps.analytics.AnalyticsReceiver" android:exported="true"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER" /> </intent-filter> </receiver> <receiver android:name="com.sample.myapp.MyAnalyticsReceiver" android:exported="true"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER" /> </intent-filter> </receiver> 

    No encontré nada en la documentación de Android Developer que explicara la advertencia. La única otra razón para la advertencia es si la intención de INSTALL_REFERRER se envía como una difusión ordenada y el receptor predeterminado de Google Analytics prohíbe la transmisión adicional, improbable pero posible, ya que esa intención proviene de la aplicación Google Market / Play, el comportamiento de los mensajes INSTALL_REFERRER Ha cambiado con diferentes versiones.

    Los documentos se refieren a @ cistearns último caso, donde 2 o más receptores están registrados para INSTALL_REFERRER.

    Hemos probado este mismo caso utilizando 2 bibliotecas diferentes de 2 proveedores diferentes y el proveedor de la segunda biblioteca no consiguió la señal INSTALL_REFERRER en nuestra implementación de producción.

    Suponemos que esto se explica por el problema indicado en los documentos de Google Analytics: que el sistema Android no está iterando a través de los receptores, incluso cuando se registran correctamente múltiples. Ese proveedor está reescribiendo para permitir un esquema de "retransmisión" personalizado .

    @cistearns, ¿Vieron varios receptores INSTALL_REFERRER recibidos por separado? ¿Es fácil para usted publicar su código de prueba? ¿Qué versión del sistema operativo?

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.