Ouvrir ServiceMode menu par programmation sous Android
Comment ouvrir Android ServiceMode menu par programmation sur les Téléphones Samsung ?
Manuellement, je peux le faire en composant le code ussd *#0011#.
Avez-vous regardé ceci : stackoverflow.com/questions/9769166/... ?
OriginalL'auteur Pedro Lobito | 2013-11-27
Vous devez vous connecter pour publier un commentaire.
Cela a été un défi et j'ai été quelques heures à la recherche d'une solution. Mais j'ai peur je n'ai pas de bonnes nouvelles.
1. D'abord tenter, l'Intention.ACTION_DIAL
Est vrai qu'au début, il était possible d'appeler directement les codes USSD à partir d'une application (en utilisant l'intention de l'Intention.ACTION_DIAL), et même à partir d'un site web, à l'aide de la "tél:" schéma. Qui ouvre le dialer, un met le numéro souhaité. Comme lorsque vous mettez le dernier #, le code d'envoyer automatiquement, il était presque transparente pour l'utilisateur, dont l'interaction n'était pas nécessaire. Mais c'était en fait considéré comme une vulnérabilité du système, depuis que quelqu'un pourrait écrire des logiciels malveillants, ou même plus, insérer du code malveillant dans un site web qui pourrait même effacer les données de votre téléphone ou de bloquer la carte sim. Vous pouvez lire à ce sujet, par exemple dans ce lien
En septembre 2012, il semble que Samsung a enfin fixe que la vulnérabilité ainsi, par exemple, votre S3 n'est pas capable de cela. À ce point il sera difficile de trouver un appareil encore vulnérables.
2. Deuxième Tentative, la solution de contournement
Ok tout dans Android est une application, même le téléphone lui-même est une application. Alors, pourquoi ne pourrions-nous pas essayer de reproduire son code? Et en fait, ce qui se passe lorsque l'utilisateur manuellement envoie un ussd?
Il y avait trop de réponses possibles:
Facile à tester: j'ai mis mon téléphone en mode avion, donc si il a à transmettre un code, j'espère qu'il ne sera pas en mesure de. Il était comme je m'y attendais: j'ai composé le code, et le ServiceMode écran est apparu! Et il était vide, on peut donc dire que le clavier s'ouvre une application système, et cette application appelle le fournisseur.
Il est facile de savoir qui est cette application. Dans les appareils Samsung, au moins dans S4, son nom est ServiceMode. Vous pouvez le trouver à
Settings > Application manager > All
. Donc, nous pouvons essayer de trouver comment il est lancé plus par le biais de l'un de cette:2.1. La lecture que le téléphone demande le code de
J'ai essayé, mais c'était assez déroutant au début, je suis donc allé à l'option 2
2.2. Vérification du mode de Service app
J'ai ouvert ES explorateur de fichier > gestionnaire d'application.
connecté le téléphone, et dans téléphone/sauvegardes/apps j'ai eu le servicestatus apk.
quelques minutes ou ingénierie inverse après, j'ai eu le fichier de manifeste, que de révéler qu'il utilise. Là, j'ai pu voir un tas d'activités, et aussi un peu de récepteurs de radiodiffusion. Je ne savais pas ce que j'ai été plus peur.
2.2.1 Permet d'essayer avec les activités.
Puisque nous savons que nous pouvons ouvrir une application spécifique à partir d'un autre, je vais essayer d'écrire une application simple, qui s'ouvrent l'une de ces activités. C'est aussi simple que:
Depuis cette application n'est pas destiné à être ouvert à partir d'une icône de lancement, il n'a pas une activité avec un filtre d'intention qui nous permettent de savoir que c'est l'activité principale. Donc, j'ai essayer au moins quelques-uns d'entre eux. Mais de toute façon, j'ai vu quelque chose que je n'aime pas. Je vous dirai plus tard.
J'ai essayé, mais, comme je m'y attendais, je ne peut ouvrir que des activités. Je reçois une activité qui n'est pas trouvé exception. Donc, permet d'essayer avec un récepteur. Au moins ce sera amusant.
2.2.2 Permet d'essayer avec les récepteurs.
Il y a un peu, mais surtout j'ai aimé l'un avec cette intention-filtre:
Semble bon. Je suis allé yo Telephony.java et là, j'ai pu voir ceci:
Ressemble beaucoup, c'est une intention spécifique, probablement le schéma, nous avons besoin n'est pas "tél:" mais "android_secret_code://" et probablement les codes doit être dans un autre format interne.
J'ai essayé, à plus ou moins juste pour le fun, car je savais qu'il y est le même problème, j'ai vu dans les activités, et est-ce:
L'application déclare que la présente autorisation, et chaque composant utilise. donc, ou vous savez comment déclarer et définir une signature, ou vous êtes une application système. Sinon, vous ne pouvez pas interagir avec cette app à tous.
Bien sûr, vous ne pensez même pas à créer votre propre servicemode application, puisque vous n'effectuez pas de ce genre de communication avec le fournisseur, sans être une application système (puisque vous avez à passer par des firmware des applications qui vont dire un triste "qui pensez-vous que vous êtes")
Conclusions
Il n'y a rien que nous pouvons faire à son point de vue, au moins avec un téléphone Samsung, et nous pouvons penser à tous les autres de téléphone sera le même.
Alternatives
Bien, en réalité rien de vraiment bon. Mais permet de voir:
La variante 1. Trouver un autre type de ussd code
Nous savons qu'il existe 2 types de USSD. Ceux qui lorsque vous composez le dernier #, l'action est déclenchée automatiquement, et les autres, qui exigent que vous appuyez sur le bouton d'appel.
Si vous essayez avec un numéroteur tiers, vous pouvez voir que
Donc, si un tiers peut envoyer ce type de codes, de chaque app. Donc Si vous pourriez essayer de trouver une alternative ussd code, de ce type qui sont déclenchés après la usser appuyez sur le bouton d'appel, vous pouvez obtenir ce dont vous avez besoin. Dans ce cas, vous devez utiliser une Intention.ACTION_CALL intention
//si vous utilisez le ACTION_DIAL intention, ouvrir le composeur et de mettre le nombre donné.
//pendant ce temps, si nous utilisons la ACTION_CALL, l'application va appeler directement.
Aussi vous devez déclarer cette autorisation dans votre manifeste
Probablement vous pourriez trouver un autre code pour ce faire, depuis que je l'ai vu un peu sur internet, mais à ce point, personne n'a travaillé pour moi. Vous pouvez lui donner un essai
De la variante 2. Attendre un officiel de l'api pour venir
Dans le android page du projet à coogle code, il ya une demande pour Ajouter USSD prise en charge des API. Il a beaucoup d'abonnés, mais il est assez ancien (plus de 5 ans), je crains que ce n'est pas vraiment bon.
De toute façon, qui pourrait arriver, probablement le android tem permettra d'envisager de préparer une api donc une application de déclarer certaines autorisations, et de faire des demandes de certains types de codes. Mais, je sais, cela peut être en attente pour toujours.
Alors, que dire. Aurait la chance de trouver une solution, ou une solution de rechange à votre application. Je suis désolé, ma recherche n'était pas plus fructueuse 🙁
très belle enquête. Je vais le tester dès que possible et, même si elle ne fonctionne pas à 100%, je vais probablement vous donner la bounty. tks
Le truc, c'est que...il l'habitude de travailler, ma conclusion a été que, à ce point n'est pas possible. La seule chance est de trouver un autre code, je l'ai expliquer ce type et pourquoi. Je vous souhaite bonne chance!
downvoter veuillez laisser un commentaire
OriginalL'auteur Carlos Robles
Je pense que j'ai une solution.
En exécutant le soufflet code sur un téléphone enracinée, vous devez ouvrir le Samsung ServiceModeApp (le mode de service indiqué dans ce post). Par programmation, je pense que l'on peut exécuter quoi que ce soit si vous êtes connecté en tant que root. Cependant, il y a des problèmes à faire face à de tels que:
Réparé que 0011 est l'argument que vous devez passer à l'activité. Code suit:
J'ai atteint par tirant ServiceModeApp de Android /system/app directory, puis la décompilation du .apk fichier, puis l'analyse de son code. Espérons que cela aide! 🙂
OriginalL'auteur mthama
FWIW: ServiceMode (SM) l'accès est à la fois HW et SW à charge, et chaque constructeur tente à plusieurs reprises de cacher le SM fonctionnalité à chaque itération de l'AM de l'API. Le SM est en fait situé dans le modem FW et ce que vous voyez est juste le wrapper Java de décision et de présenter les résultats des différents appels au modem RTOS. (Vous pouvez vérifier dans votre modem FW à voir pour votre auto.) En outre, avec les récentes Samsung/HTC stock FW, ils ont également demander l'activation de certains fichiers dans le dossier /efs/annuaire.
OriginalL'auteur not2qubit