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


No se puede encontrar el receptor definido Definido ~ 1% del tiempo

Tengo un @AAR que requiere una entrada en el manifiesto de la aplicación de consumo. Durante el bootstrapping de mi biblioteca inspecciono el AndroidManifest.xml para el receptor requerido y si no puedo encontrarlo arrojo una RuntimeException ya que mi biblioteca no funcionará correctamente. Esto funciona en el 99% de las instalaciones, pero hay un pequeño número de instalaciones que lanzan esta RuntimeException cuando el receptor claramente existe.

Android v4.4 – v5.1.1 están incluidos en los informes de fallos. Samsung, Lenovo, Nexus 4, Nexus 5, etc. son todos los dispositivos afectados.

  • Android Studio dos sabores con diferentes archivos de manifiesto
  • Acerca de la pantalla completa y sin barra de título de manifiesto
  • Cambiar metadatos de manifiesto de código
  • Utiliza acelerómetro en el manifiesto
  • Registrar la clase Application en Manifest?
  • No se establece el tema de Android
  • La pista más interesante es que ~ 75% de los accidentes están en dispositivos con raíces. La especulación ha sido que esto es el resultado de alguna ROM personalizada o alguna otra aplicación que está interfiriendo con la detección del receptor.

    He probado con una raíz Nexus 5 w / 4.4.4 y funciona bien. He probado con una acción Nexus 5 w / 5.1.1 y funciona bien. He probado con un Nexus 5 CyanogenMod 12.1 (última versión) y funciona bien. He aplicado todas las opciones de Privacy Guard disponibles y todavía funciona bien.

    Realmente en una pérdida y no quieren abandonar a los usuarios afectados.

    AndroidManifest.xml

     <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"> <permission android:name="${applicationId}.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <application> <receiver android:name="com.example.MyBroadcastReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="${applicationId}" /> </intent-filter> </receiver> <!-- Activities, etc. removed for brevity --> </application> </manifest> 

    Clase

     public class CheckSetup { // Other methods removed for brevity public void checkManifest() { List<ResolveInfo> receiversInfo; Intent checkIntent = new Intent(applicationContext, MyBroadcastReceiver.class); receiversInfo = packageManager.queryBroadcastReceivers(checkIntent, 0); boolean receiverFound = false; if (receiversInfo != null) { for (ResolveInfo resolveInfo : receiversInfo) { if (resolveInfo.activityInfo != null && resolveInfo.activityInfo.name.equals(MyBroadcastReceiver.class.getName()) && resolveInfo.activityInfo.packageName.equals(packageName)) { receiverFound = true; } } } if (!receiverFound) { throw new RuntimeException(String.format("%s definition not found in AndroidManifest.xml", MyBroadcastReceiver.class.getName())); } } } 

  • Android Studio APK Analyzer para las compilaciones de depuración
  • Certificados APK de Android: ¿qué campos son necesarios y qué si cambia la información?
  • Disposición de Android: distinguir un dispositivo grande de 800x480 de una tableta 1024x600
  • Ocultar teclado suave
  • Error AsyncTask y Looper.prepare ()
  • Cómo acceder a setPreferredNetworkType en la fuente de Android
  • 2 Solutions collect form web for “No se puede encontrar el receptor definido Definido ~ 1% del tiempo”

    La única manera que he podido reproducir este comportamiento es instalando una aplicación de terceros que me permite desactivar de forma selectiva Services y Receivers . No estoy seguro de por qué alguien querría hacer esto y una vez desactivado no hay forma de volver a habilitarlos desde mi AAR.

    El mejor caso ha sido lanzar una excepción durante el desarrollo y simplemente la salida a LogCat para la producción de lanzamientos firmados.

    Un ejemplo de tal aplicación se puede encontrar aquí:

    https://play.google.com/store/apps/details?id=cn.wq.myandroidtools

    ¿Se puede eliminar android: exportado = "true" y comprobar? Idealmente android: exportado debe ser falso.

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