IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Sauvegarde de SMS dans une BDD MySQL


Sujet :

Android

  1. #1
    Membre à l'essai
    Homme Profil pro
    Developpeur
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 12
    Points
    12
    Par défaut Sauvegarde de SMS dans une BDD MySQL
    Bonjour à tous,

    Je me permets de vous demander un petit coup de pouce pour l’élaboration d’un programme Android. J’aimerai récupérer chaque sms reçu pour l’inscrire dans une base de données MySql sur un serveur distant. A ce jour cela fonctionne mais pas comme je le souhaiterai. En effet j’utilise un broadcast receiver qui me détecte l’arrivée d’un message, ensuite je repasse cette chaine de caractère dans mon activity principale par l’intermédiaire d’un intent pour que je puisse me connecter à la base de données afin d’y enregistrer ce sms. En faisant comme ceci, à chaque réception d’un sms j’ai mon application qui s’ouvre et qui se connecte à la base, mais je voudrais que tout cela se fasse en arrière-plan avec juste une activity pour pouvoir y configurer les options de mon appli.
    J’ai donc fait un tour sur le net pour trouver une solution à mon problème et j’ai vu que l’on pouvait utiliser les services. J’aimerai donc savoir si c’est cette méthode qu’il faut que j’utilise ou non. Si oui, puis-je utiliser un broadcast receiver dans une classe de type service ? Avez-vous d’autres conseils à me donner sur la construction des bases de l’appli ? Je veux créer mon programme sur de bonnes bases en utilisant les outils appropriés pour que ça ne devienne pas une usine à gaz au bout de quelques mises à jour.

    Je vous remercie pour toute l’aide que vous m’apporterez !

  2. #2
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Qu'est-ce qui t'empêche de mettre ton code pour l'insertion directement dans le BroadcastReceiver ?
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  3. #3
    Membre à l'essai
    Homme Profil pro
    Developpeur
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Merci pour cette réponse. En effet je n'y avais même pas pensé, je voulais faire compliqué... J'ai donc ajouté mon code dans mon broadcast receiver et cela fonctionne.
    Mais je reviens avec mon service.. Mon but et de pouvoir mettre en marche et stopper cette sauvegarde quand je veux grâce à deux boutons dans mon activity. Pour cela j'ai crée une classe service qui est appelée par le onClick d'un bouton sur mon activité. le service démarre bien, je le vois dans le gestionnaire d'applis du téléphone mais mon code ne semble pas exécuté.. Voici le code de mon service, cela aidera à la compréhension :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    package com.android.AndroSMS;
     
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
     
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
     
    import android.app.Service;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.IBinder;
    import android.telephony.SmsMessage;
    import android.util.Log;
    import android.widget.Toast;
     
    public class ServiceSmsReceive extends Service
    {
     
    	private final String   ACTION_RECEIVE_SMS  = "android.provider.Telephony.SMS_RECEIVED";
     
    	@Override
    	public void onCreate()
    	 {
    		 Log.e("log_tag", "onCreate");
    	 }
     
     
    	public void onStartCommand(Context context, Intent intent)
        {
     
    		Log.e("log_tag", "onStart");
     
            if (intent.getAction().equals(ACTION_RECEIVE_SMS))
            {
                Bundle bundle = intent.getExtras();
                if (bundle != null)
                {
                    Object[] pdus = (Object[]) bundle.get("pdus");
     
                    final SmsMessage[] messages = new SmsMessage[pdus.length];
                    for (int i = 0; i < pdus.length; i++)  {  messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);  }  if (messages.length > -1)
                    {
                        final String messageBody = messages[0].getMessageBody();
                        final String phoneNumber = messages[0].getDisplayOriginatingAddress();
     
                        Toast.makeText(context, "Expediteur : " + phoneNumber, Toast.LENGTH_LONG).show(); 
                        Toast.makeText(context, "Message : " + messageBody, Toast.LENGTH_LONG).show();
     
                        // Init du sms à sauvegarder
                	   	InputStream is = null;
                	   	String result = "";
     
                	   	ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                	   	nameValuePairs.add(new BasicNameValuePair("sms", messageBody));              
     
                	    // Envoie de la commande http
                	   	try{
                		    	HttpClient httpclient = new DefaultHttpClient();
                		    	HttpPost httppost = new HttpPost("http://xx.xx.xxx.xxx:xxx/insertBDD.php");
                		    	httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                		    	HttpResponse response = httpclient.execute(httppost);
                		    	HttpEntity entity = response.getEntity();
                		    	is = entity.getContent();
                	   	}catch(Exception e){
                	   		Log.e("log_tag", "Erreur de connexion HTTP :" + e.toString());
                	   	}               
     
                    }
     
                }
           }
       }
     
     @Override
     public IBinder onBind(Intent arg0)
     {
     return null;
     }
     
    }
    Dans mon logCat j'ai bien "onCreate" lorsque je démarre mon appli, mais à la réception d'un sms le code en aval de "onStart" ne semble pas exécuté.

    Infos : Dans mon manifest j'ai bien les autorisations suivantes :
    <uses-permission android:name="android.permission.READ_SMS"/>
    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
    <uses-permission android:name="android.permission.INTERNET" />

    Je vous remercie

  4. #4
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Activer/désactiver un BroadcastReceiver revient à l'enregistrer/dé-enregistrer programmatiquement (agit au niveau des filtres d'intentions).
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  5. #5
    Membre à l'essai
    Homme Profil pro
    Developpeur
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Merci mais Oula, je suis loin de te comprendre ! Je débute en programmation Java/Android donc je n'y connais pas grand chose :/.
    Le code ne fonctionne pas car à un endroit j'ai désactivé mon BrodcastReceiver c'est cela ?

  6. #6
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Ce que je veux dire, c'est que l'objectif de ton premier bouton "marche" est de faire :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    registerReceiver(leReceiver, filterSMS);
    et le second bouton "stop" de faire :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    unregisterReceiver(leReceiver);

    Pas besoin de service...
    Pas de déclaration du filtre d'intention du BroadcastReceiver au niveau du manifest...
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  7. #7
    Membre à l'essai
    Homme Profil pro
    Developpeur
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Ah d'accord, je comprends mieux du coup. J'ai quand même réussi à faire ce que je voulais, en passant par un service. Mais je vais essayer ta proposition qui me parait plus simple.
    Petite question du coup : si j'utilise un BroadcastReceiver dans mon activity avec ces deux boutons comme tu me conseilles et que je ferme mon appli (Appui long sur le bouton home et kill de l'appli), le BroadcastReceiver continuera sa fonction ou sera stoppé ? Je devrais toujours laisser mon appli en mémoire ?

    Merci à toi

  8. #8
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Pour ce genre de chose, à toi de placer ces instructions dans les bonnes méthodes de callbacks qui gère le cycle de vie d'une activité. Par exemple, dans le onDestroy()...
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  9. #9
    Membre à l'essai
    Homme Profil pro
    Developpeur
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Merci pour ton aide, tes infos. Je vois mieux comment organiser mon appli maintenant.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. sauvegarder dans une bdd mysql
    Par ssk2510 dans le forum JDBC
    Réponses: 9
    Dernier message: 12/05/2011, 14h38
  2. Sauvegarder une instance d'une classe Java dans une BDD MySQL
    Par malag dans le forum Administration
    Réponses: 1
    Dernier message: 03/09/2006, 19h23
  3. pb pour rentrer une valeur dans une bdd mysql
    Par gaetan.tranvouez dans le forum Requêtes
    Réponses: 25
    Dernier message: 02/06/2006, 21h29
  4. inserer des photos dans une bdd mysql
    Par oceane751 dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/05/2006, 20h06
  5. Changements de colonnes dans une BDD MySQL
    Par arnaud_verlaine dans le forum Requêtes
    Réponses: 8
    Dernier message: 07/08/2003, 11h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo