[Problème] Android 5.0 Action à réception d'un SMS (Broadcast SMS receiver)

  • Auteur de la discussion androgenese
  • Date de début
A

androgenese

Membre
Inscrit
26 Octobre 2017
Messages
3
Points
0
  • #1
Bonjour à tous,

je suis débutant sur Android et j'essaie de faire fonctionner le tutoriel suivant :
S'il vous plaît, Connexion ou S'inscrire pour voir le contenu ou les urls !


Ma version cible sur mon mobile physique est Android Lollipop (5.0 ), je l'ai donc défini dans l'émulateur mobile avec un Nexus 5.

Lorsque je lance l'installation sur l'ADB :
> je n'ai pas d'erreur de compilation ni d'installation.
> Il n'y a pas de logo de l'application sur le mobile pour cliquer dessus, je pense que c'est normal car je n'utilise pas d'activité.

J'avais d'ailleurs un message d'erreur au début, activity not found que j'ai corrigé en faisant : Run -> Edit Configurations et j'ai choisi nothing au lieu de default activity

> Ensuite lorsque j'envoie un sms via l'émulateur, je vois bien l'icône du sms (en haut) mais le message Toast n'apparaît pas.

A noter que j'ai fait quelques modifications (notamment, j'ai adapté le namespace qui a été généré différemment lors de l'initialisation du projet, je l'ai reporté de façon cohérente).

Voici le code de mon application :
AndroidManifest.xml (j'ai fait quelques modifications suggérées par android studio par rapport au code du tuto, exemple, suppression de : <uses-sdk android:minSdkVersion="7" />)

Code:
S'il vous plaît, Connexion ou S'inscrire to view codes content!

Classe SMSReceiver.java

Code:
S'il vous plaît, Connexion ou S'inscrire to view codes content!

Si ça peut aider vous trouverez ci-dessous la capture d'écran de mon projet dans Android Studio :
rR9Dv.png


Actuellement, je ne vois plus trop ce qui bloque, et pourquoi mon Toast ne s'affiche pas ?

Est-ce que le code source du tuto fonctionne avec la version Lollipop ?

Auriez-vous une suggestion à me faire ?

Merci d'avance pour votre aide et retour.
 
Valentin

Valentin

Moderateur Global
Inscrit
20 Février 2013
Messages
7 829
Points
48
  • #2
Salut,

Tu ne peux pas tester directement sur ton tél.

As tu accès au logs ? Même si il n'y a pas d'erreur, on ne sais jamais.

J'ai l'impression que la méthode onReceive n'est jamais appelée.
 
A

androgenese

Membre
Inscrit
26 Octobre 2017
Messages
3
Points
0
  • #3
Valentin a dit:
Salut,

Tu ne peux pas tester directement sur ton tél.

As tu accès au logs ? Même si il n'y a pas d'erreur, on ne sais jamais.

J'ai l'impression que la méthode onReceive n'est jamais appelée.

Bonjour Valentin,

merci pour ta réponse.

Du coup pour simplifier les choses, je teste sur un mobile physique l'application. Je verrai après pour le porter sur la version cible.

Il est sur une version d'android 7 par contre, j'espère que cela ne pose pas de problème. J'ai réinitialisé tout mon projet pour me retrouver avec un namespace identique à celui du tuto (lors de l'initialisation du projet sur android studio j'ai laissé la valeur par défaut avec la version minimale 4.0 et il a dit que c'était compatible avec 100% des mobiles, je pense que ce point est ok).

J'ai lancé l'installation via android studio et je vois que l'application est installée dans la liste des applications.
De plus en fouillant un peu je me rends compte que j'avais laissé un point en suspend, par défaut je n'avais pas autorisé l'application sur la partie SMS donc ça aurait pu être un motif de non fonctionnement.

Pour tester la méthode onReceive
Je m'envoie un sms depuis le mobile sur lequel j'ai installé l'application. Toujours pas de toast qui s'affiche.
J'ai ajouté des logs (cf code dans la classe ci-dessous) dans la méthode onReceive, mais il n'apparaisse pas dans logCat à la réception du SMS. J'imagine que ça devrait être le cas.

Sinon dans ce que je vois dans Graddle console :
Code:
S'il vous plaît, Connexion ou S'inscrire to view codes content!

Dans logcat je vois ça en boucle donc je ne pense pas que ce soit lié :
Code:
S'il vous plaît, Connexion ou S'inscrire to view codes content!


Ci-dessous le code au cas où ça pourrait aider :

> le manifest
Code:
S'il vous plaît, Connexion ou S'inscrire to view codes content!

> la classe SMSReceiver.java
Code:
S'il vous plaît, Connexion ou S'inscrire to view codes content!

Du coup auriez-vous une idée ou des suggestions à me faire pour que le toast s'affiche à la réception d'un sms ?

Merci d'avance pour vos réponses.
 
Valentin

Valentin

Moderateur Global
Inscrit
20 Février 2013
Messages
7 829
Points
48
  • #4
Le namespace c'est le com.xxxxxx.yy ? Si tu met l'appli sur le Play Store il doit être unique donc pense à choisir un nom en fonction.

Tu as donc ajouté les permissions dans l'Android Manifest, c'est bien ça ?

Tu as bien une classe MainActivity ?
 
A

androgenese

Membre
Inscrit
26 Octobre 2017
Messages
3
Points
0
  • #5
Bonjour Valentin,

merci pour ton message.

Concernant le point sur Google Play merci, ça me servira pour plus tard.

Effectivement dans le manifest j'ai bien les permissions (RECEIVE_SMS, READ_SMS), mais je les ai toujours eues car, je fais du copier / coller du tuto mentionné dans mon premier post (
S'il vous plaît, Connexion ou S'inscrire pour voir le contenu ou les urls !
).
Toutefois android studio me suggère des optimisations parfois alors là je les ai mis plus haut dans le manifest par rapport à ma version précédente.

Ce que je disais par rapport aux permissions c'est au niveau de l'application dans le téléphone, je suis passé par la rubrique paramètre > application puis j'ai cliqué pour dire que j'étais d'accord pour que l'application que j'ai installée puisse agir sur les SMS (réception, lecture).

Par contre, non je n'ai pas de classe MainActivity car il n'y en a pas dans le tutoriel, c'est un tutoriel court mais complet, je ne pense pas qu'il en faille une. Je m'interroge surtout sur la compatibilité du code (avec les versions plus récentes d'android).

Pour ma part, j'ai peut-être une vision simpliste mais je pense que c'est le manifest qui explique au téléphone ce qu'il doit faire en cas de réception de sms => solliciter la classe SMSReceiver qui contient un événement OnReceive ...

Merci pour tes réponses.
 
Haut Bas