64 votes

Facebook "Messager" est une Émission de SMS Récepteur qui prend la priorité la plus élevée après le redémarrage

Facebook Messenger, est une priorité de l' 2147483647, pour leur android.provider.Telephony.SMS_RECEIVED récepteur de radiodiffusion, a déclaré dans leur manifeste.

(C'est triste, nous sommes obligés de ne pas suivre la documentation des normes de max, la priorité étant de 1000 parce que d'autres apps de faire leurs propres règles)

Je comprends que si ma priorité est également définie à l'ridiculement haut niveau d' 2147483647 que j'aurais du avoir mon application installée la première à prendre la priorité sur toutes les "liens". Pas de problème, j'ai fait un écran pour alerter les utilisateurs dans les applications auront probablement besoin d'être désinstallé puis ré-installé après mon application fonctionne correctement.

Mais, ici, est le problème - Tout fonctionne bien, mais dès que le téléphone redémarre, "Messager" commence à obtenir la priorité sur mon application. J'ai regardé un peu partout pour voir comment ils pourraient le faire de la magie noire. Comment font-ils cela? Comment puis-je obtenir la priorité, après redémarrage, lorsque mon appli est installé en premier?

La seule chose qui est venu à l'esprit que jusqu'à présent, les noms de paquets étant classés par ordre alphabétique au démarrage lors de l'enregistrement des récepteurs de radiodiffusion.

com. f acebook > com. s trikeforcezero

J'étais sur le point de tenter d'inscrire mon récepteur de radiodiffusion sur android.intent.action.BOOT_COMPLETED mais j'ai le sentiment que cela ne fonctionnera pas.

Messenger a aussi un autre "faible prieuré récepteur de radiodiffusion" pour android.provider.Telephony.SMS_RECEIVED ensemble de -1

3voto

Sherif elKhatib Points 23987

Pour sûr:

Si l'utilisateur télécharge l'application avant facebook, votre récepteur sera prioritaire, bien que les deux ont la priorité 2147483647. Après un redémarrage, Facebook du récepteur à l'emporte bien que les deux ont la même priorité et le vôtre a été installé avant. Donc, pour vous, l'astuce est dans leur BootReceiver.

Devine:

  1. Dans une première étape, ajouter un démarrage récepteur avec la même priorité 2147483647 (bien que la priorité n'a pas d'effet, mais il suffit de l'ajouter à votre application. Essayez d'installer votre application avant de l'facebook de l'application et redémarrez le téléphone. Il pourrait être lié au fait que votre processus commence avant facebook dans ce cas et votre sms récepteur commencera avant facebook.
  2. Faire la même chose mais de renommer le nom du paquet à un.un.un juste pour avoir la priorité sur facebook par ordre Alphabétique.
  3. Dans la séquence de Démarrage du Récepteur, essayez d'ajouter le code suivant:

    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. Il pourrait être utile d'essayer de savoir si votre démarrage du récepteur est de prendre la priorité sur facebook de démarrage du récepteur. Je ne suis pas sûr si c'est possible.

  5. Enfin, il s'agit du processus qui peuvent être différenciés dans le manifeste, mais ne suis pas sûr si cela peut être pratique dans de toute façon.

2voto

Senthil Prabhu Points 70

Même si max la valeur de la priorité est de 1000, Facebook a utilisé la plus grande valeur entière comme prioritaire pour être le premier. Je dirais donc, vous devez également conserver les mêmes (2147483647) si vous voulez avoir une chance. Alerter les utilisateurs à désinstaller et installer Facebook après votre application est installée.

Pour obtenir de priorité après le redémarrage: Vous ne pouvez pas définir la priorité pour boot_completed donc, essayer d'Explorer android code source en particulier SystemServer.java et de voir une fois SystemServer est en place et en cours d'exécution et une fois le démarrage terminé, ce que commande est utilisée pour démarrer des applications qui sont enregistrés pour boot_completed.

2voto

Joshcodes Points 1411

Mon soupçon serait que les liens ne sont pas rompus par l'application installé en premier, mais l'application qui est exécutée en premier. Dans le cas où vous êtes manuellement l'installation et la désinstallation des applications manuellement le contrôleur de l'exécution de la commande. Ensuite, lorsque vous redémarrez l'ordinateur, l'ordre d'exécution est abandonné à Android lancement du comportement. Il serait facile de tester si cela se produit, par ordre alphabétique: construire un test rapide nom de l'application aaa et voir si elle maintient la priorité après le redémarrage. Si l'ordre d'amorçage ne change pas l'ordre alphabétique, de commentaires, et je vais travailler sur la façon de lancement de commande de l'installation.

1voto

Bush Points 593

Cela révèle quelques bug sur Android mécanisme étant donné que le nombre que vous pensez qu'ils sont à mettre dans le manifeste n'est pas vraiment le nombre. 2147483647 est vraiment (-1) qui est de 2^31. Pourquoi pensez-vous que c'est de la matière qui demande de l'installer en premier?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X