Est-ce que j2ee est vraiment une balise correspondante ici?
gigue
1
Pourquoi java serait-il incorrect si vous ne programmez pas en java sur Android?
gigue
3
Cela sent le mal. Vous ne devriez pas faire ça.
MattC
43
Il y a des utilisations légitimes! Par exemple, si vous voulez faire quelque chose (envoyer une position GPS, effacer ou quelque chose) sur votre téléphone via SMS en cas de vol; vous ne voulez pas que celui qui a volé le téléphone voie ce SMS.
polyglotte
21
Allez! Ce n'est certainement PAS "mal" du tout. @polyglot a raison! Je fais une application pour confirmer le numéro de l'utilisateur (comme le fait Viber) et j'en ai besoin. Tout peut être utilisé comme "mal". N'installez pas de mauvaises applications, juste ça.
Felipe
Réponses:
187
Oui.
Malgré quelques réactions négatives à cette question, il existe des utilisations légitimes de l'interception SMS. Par exemple: automatiser la vérification du numéro de téléphone, les services qui sont fournis par SMS (bien que généralement cela devrait être fait avec des SMS de données), ou pour les applications qui améliorent autrement l'expérience utilisateur en traitant des messages spécialement formatés afin de les afficher dans un bel Android -UI spécifique.
À partir d'Android 1.6, les diffusions de messages SMS entrants ( android.provider.Telephony.SMS_RECEIVED) sont livrées sous la forme d'une « diffusion ordonnée », ce qui signifie que vous pouvez indiquer au système quels composants doivent recevoir la diffusion en premier.
Si vous définissez un android:priorityattribut sur votre écoute SMS <intent-filter>, vous recevrez alors la notification avant l'application SMS native.
À ce stade, vous pouvez annuler la diffusion, l'empêchant de se propager à d'autres applications.
Mon Dieu. C'est vrai! J'ai toujours pensé que ce serait l'inverse! Pour preuve, regardez ici . Sensationnel. J'aimerais pouvoir vous donner plus d'un vote favorable;)
Hamy
1
@kakopappa: Oui, comme mentionné dans la réponse, cela fonctionne à partir d'Android 1.6+.
Christopher Orr
1
@herom J'ai des applications qui utilisent la priorité 1000, c'est donc possible. En fait, Handcent utilise la priorité 2147483647.
Christopher Orr
2
Cela a fonctionné pour moi :) Mon application attrape d'abord le message et il n'y a pas de notification, mais les sms ne parviennent pas à la boîte de réception Messages. Comme s'il n'avait jamais été reçu, uniquement dans mon application. Existe-t-il un moyen d'utiliser la diffusion d'abandon mais de recevoir des messages dans la boîte de réception?
pandabear du
7
Il est important de garder à l'esprit le nouveau niveau d'API 19 comme le dit @ChristopherOrr dans sa mise à jour. Là, il dit "Beginning with Android 4.4—any attempt by your app to abort the SMS_RECEIVED_ACTION broadcast will be ignored so all apps interested have the chance to receive it.".
GoRoS
11
Étape 1: Créez votre récepteur de diffusion personnalisé pour recevoir des sms. écrivez la logique pour abandonner la diffusion afin que le message ne soit pas disponible dans votre boîte de réception
Comme la réception de SMS est une diffusion ordonnée, le récepteur avec une priorité élevée recevra en premier afin que votre application reçoive en premier et après réception, vous interrompez la diffusion. Aucune autre application ne peut donc la recevoir. Par conséquent, le sms n'existera pas dans la boîte de réception
pouvons-nous avoir un récepteur de diffusion, lorsque l'utilisateur appuie sur la boîte de réception des messages, afin que je puisse développer un écran de verrouillage ..
Vamsi Pavan Mahesh
9
La solution ci-dessous ("android: priority" et abortBroadcast ()) fonctionne aussi longtemps que l'application de messagerie Android par défaut (je voulais dire l'application de messagerie Android d'origine). Si l'utilisateur installe "GoSMSPro" ou "HandcentSMS", ces applications affichent toujours des messages dans la boîte de réception, je crois que cela est dû à "android: priorité". Je ne vois pas de meilleur moyen de résoudre le problème ci-dessus, si des applications de messagerie tierces sont installées sur le téléphone.
Bon point. Mais cela devrait être un commentaire, pas une réponse. Est-il possible de le déplacer? --- et si vous accordez une valeur très élevée? Comme Android: priority = "9999"? par exemple? Avez-vous essayé cela?
Felipe
4
@FelipeMicaroniLalli en fait GO SMS PRO, etc ... utiliser 2147483647 pour leur priorité
@NomanHamid C'est correct. 999 est la priorité maximale. Vous pouvez utiliser le numéro de votre choix, mais Android ne garantira que 999. Tout ce qui est plus grand que cela et cela peut ou non être instable et avoir des conséquences inattendues. Personnellement, j'ai dû utiliser 2147483647 pour essayer de parcourir des applications comme GO SMS PRO. Parfois, cela fonctionnait pour les utilisateurs et parfois non.
Si vous avez un scénario comme celui-ci et que vous souhaitez supprimer ou ignorer le message lié à ce numéro de contact "+ 44xxxxx", etc., utilisez ce code dans SMS Broadcast receiver
Réponses:
Oui.
Malgré quelques réactions négatives à cette question, il existe des utilisations légitimes de l'interception SMS. Par exemple: automatiser la vérification du numéro de téléphone, les services qui sont fournis par SMS (bien que généralement cela devrait être fait avec des SMS de données), ou pour les applications qui améliorent autrement l'expérience utilisateur en traitant des messages spécialement formatés afin de les afficher dans un bel Android -UI spécifique.
À partir d'Android 1.6, les diffusions de messages SMS entrants (
android.provider.Telephony.SMS_RECEIVED
) sont livrées sous la forme d'une « diffusion ordonnée », ce qui signifie que vous pouvez indiquer au système quels composants doivent recevoir la diffusion en premier.Si vous définissez un
android:priority
attribut sur votre écoute SMS<intent-filter>
, vous recevrez alors la notification avant l'application SMS native.À ce stade, vous pouvez annuler la diffusion, l'empêchant de se propager à d'autres applications.
Mise à jour (octobre 2013): à l' arrivée d'Android 4.4, il apportera des modifications aux API SMS, ce qui peut affecter la capacité d'une application à influencer la livraison de SMS.
Consultez cet article de blog des développeurs Android pour plus d'informations:
http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html
la source
1000
, c'est donc possible. En fait, Handcent utilise la priorité2147483647
."Beginning with Android 4.4—any attempt by your app to abort the SMS_RECEIVED_ACTION broadcast will be ignored so all apps interested have the chance to receive it."
.Étape 1: Créez votre récepteur de diffusion personnalisé pour recevoir des sms. écrivez la logique pour abandonner la diffusion afin que le message ne soit pas disponible dans votre boîte de réception
Étape 2 Enregistrez le récepteur de diffusion dans AndoridManifest et mettez Android: valeur de priorité un grand nombre
C'est tout
Comment fonctionne le code ci-dessus
Comme la réception de SMS est une diffusion ordonnée, le récepteur avec une priorité élevée recevra en premier afin que votre application reçoive en premier et après réception, vous interrompez la diffusion. Aucune autre application ne peut donc la recevoir. Par conséquent, le sms n'existera pas dans la boîte de réception
la source
La solution ci-dessous ("android: priority" et abortBroadcast ()) fonctionne aussi longtemps que l'application de messagerie Android par défaut (je voulais dire l'application de messagerie Android d'origine). Si l'utilisateur installe "GoSMSPro" ou "HandcentSMS", ces applications affichent toujours des messages dans la boîte de réception, je crois que cela est dû à "android: priorité". Je ne vois pas de meilleur moyen de résoudre le problème ci-dessus, si des applications de messagerie tierces sont installées sur le téléphone.
la source
Vérifiez la priorité et définissez une priorité plus élevée (dans votre manifeste) que les autres destinataires.
la source
Si vous avez un scénario comme celui-ci et que vous souhaitez supprimer ou ignorer le message lié à ce numéro de contact "+ 44xxxxx", etc., utilisez ce code dans SMS Broadcast receiver
Vous devez également lui attribuer la haute priorité.
la source