Facebook "Messenger" tiene un SMS Broadcast Receiver que tiene la máxima prioridad después de reiniciar

Messenger de Facebook, tiene una prioridad de 2147483647 , para su receptor de difusión android.provider.Telephony.SMS_RECEIVED , declarado en su manifiesto.

(Es triste que nos vemos obligados a no seguir los estándares de la documentación de máxima prioridad siendo 1000 porque otras aplicaciones hacen sus propias reglas)

Entiendo que si mi prioridad también se establece en el nivel ridículamente alto de 2147483647 que tendría que tener mi aplicación instalada en primer lugar para tener precedencia sobre cualquier "vínculos". No hay problema, hice una pantalla para alertar a los usuarios de las aplicaciones que probablemente tendría que ser desinstalado y luego reinstalado después de mi aplicación para funcionar correctamente.

Pero, aquí está el problema – Todo funciona bien, pero tan pronto como el teléfono se reinicia, "Messenger" comienza a tener precedencia sobre mi aplicación. He buscado en todo el lugar para ver cómo podrían hacer esta magia negra. ¿Cómo lo hacen? ¿Cómo obtengo prioridad después del reinicio, cuando mi aplicación se instala primero?

La única cosa que ha venido importar hasta ahora, es nombres del paquete que son ordenados alfabéticamente en cargador al registrar receptores de la difusión.

Com F acebook> com. S trikeforcezero

Yo estaba a punto de intentar registrar mi receptor de difusión en android.intent.action.BOOT_COMPLETED pero tengo la sensación de que esto no funcionará.

Messenger también tiene otro "receptor de difusión de prioridad baja" para android.provider.Telephony.SMS_RECEIVED establecido en -1

Por supuesto :

Si el usuario descarga la aplicación antes de facebook, el receptor tendrá prioridad aunque ambos tienen la prioridad 2147483647. Después de un reinicio, el receptor de Facebook tiene prioridad aunque ambos tienen la misma prioridad y la suya fue instalada antes. Por lo tanto, seguro, el truco está en su BootReceiver.

Conjeturas

  1. Como primer paso, agregue un receptor de arranque con la misma prioridad 2147483647 (aunque la prioridad no tiene ningún efecto, pero simplemente agregue) a su aplicación. Intenta instalar tu aplicación antes de la aplicación de Facebook y reinicia el teléfono. Podría estar relacionado con el hecho de que su proceso se inicia antes de facebook en este caso y su receptor de sms se iniciará antes de facebook.
  2. Haga lo mismo, pero cambie el nombre de su paquete a aaa para tener precedencia sobre facebook en orden alfabético.
  3. En su receptor de arranque, intente agregar el código siguiente:

     ComponentName component; component=new ComponentName(this, SmsReceiver.class); getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); component = new ComponentName(this, SmsReceiver.class); getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); 
  4. Podría ser útil para tratar de saber si su receptor de arranque tiene prioridad sobre el receptor de arranque de facebook. No estoy seguro si eso es posible.

  5. Por último, hay el proceso que puede ser diferenciado en el manifiesto, pero no estoy seguro de si eso puede ser útil en cualquier caso.

Aunque el valor máximo de prioridad es 1000, Facebook utilizó el valor entero más grande como prioridad para ser el primero. Por lo tanto, yo diría que también debe mantener la misma (2147483647) si desea tener una oportunidad. Alerta a los usuarios para que desinstalen e instalen Facebook después de instalar la aplicación.

Para obtener prioridad después de reiniciar: No puedes establecer la prioridad para boot_completed así que intenta Explorar el código fuente android especialmente SystemServer.java y ver una vez que SystemServer está activo y funcionando & una vez que se complete el arranque, qué orden se usa para iniciar las aplicaciones que están Registrado para boot_completed.

Mi sospecha sería que los lazos no se rompen por la aplicación instalada primero, sino la aplicación que se ejecuta primero. En el caso de que esté instalando y desinstalando aplicaciones manualmente, es el controlador manualmente el orden de ejecución. A continuación, al reiniciar, el orden de ejecución se renuncia al comportamiento de inicio de Android. Sería fácil probar si esto ocurre alfabéticamente: construye un nombre de la aplicación de prueba rápida aaa y ve si mantiene la prioridad después de reiniciar. Si el orden de arranque no cambia en orden alfabético, el comentario y voy a ir a trabajar cómo el orden de lanzamiento es la configuración.

Esto revela algunos errores en el mecanismo de Android, ya que el número que usted piensa que están poniendo en el manifiesto no es realmente el número. 2147483647 es realmente (-1) que es 2 ^ 31. ¿Por qué crees que es la materia que la aplicación instaló primero?

  • ¿Subir varias imágenes con volley?
  • Cómo registrar elemento HTML personalizado como widget en GWT
  • ¿Cómo evitar httpsURLConnection.getInputStream () en Android colgando si se proporcionan credenciales de inicio de sesión incorrectas?
  • El botón puede producir una excepción de puntero nulo (Android Studio)
  • KeyPairGeneratorSpec reemplazo con los equivalentes de KeyGenParameterSpec.Builder - falló la operación del almacén de claves
  • No puedo trabajar con Jackson
  • Aplicación de Android - ¿Cómo puedo añadir soporte de pantalla Nexus 7 sin tener que definir explícitamente otros
  • Android: TextInputLayout no centrará la pista
  • android enviar archivo de vídeo (mp4) a php servidor
  • Cómo arrastrar y soltar a los actores en libgdx scene2d?
  • Reconocimiento de imágenes - Descriptor binario representación en Mat - OpenCV Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.