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 :

Ouvrir une URL à la réception d'un SMS


Sujet :

Android

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Points : 7
    Points
    7
    Par défaut Ouvrir une URL à la réception d'un SMS
    Bonjour,
    Je me suis lancé il y a peu dans le dev Android, j'ai acheté un bouquin et parcouru pas mal de tutos dans le but de faire ouvrir une page dans le navigateur du GSM à la réception d'un SMS contenant un code particulier.
    Dans mes essais, je voudrais que le navigateur s'ouvre sur la page www.android.com dés qu'il reçoit un SMS commençant par"#". Tout mes essais sont infructueux, je sollicite donc votre aide. Voici mon fichier Manifest:
    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
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.sms_web"
        android:versionCode="1"
        android:versionName="1.0" >
     
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="18" />
     
        <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
        <uses-permission android:name="android.permission.INTERNET" />
     
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.example.sms_web.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
     
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
     
            <receiver android:name=".SMSReceive"> 
      <intent-filter> 
        <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
    </receiver>
     
        </application>
     
    </manifest>
    et mon fichier MainActivity.java:
    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
    package com.example.sms_web;
     
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import android.telephony.SmsMessage;
    import android.widget.Toast;
     
    public class MainActivity extends BroadcastReceiver{
     
        @Override
        public void onReceive(Context context, Intent intent) {
     
            if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
                // récupérer SMS
                Bundle bundle = intent.getExtras();        
                SmsMessage[] msgs = null;
     
                if (bundle != null)
                {
                    // récupérer le SMS
                    Object[] pdus = (Object[]) bundle.get("pdus");
                    msgs = new SmsMessage[pdus.length];     
                    String body ="";
                    for (int i=0; i<msgs.length; i++){
                        msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);                
                        body =  msgs[i].getMessageBody().toString();  
                        if(body.startsWith("#")){
                                           // action a effectuer à la réception du SMS: ici affichage du mot POKE
                                           // lorsque le SMS commence par ##androPoke##
                            Toast.makeText(context, "POKE", Toast.LENGTH_SHORT).show();
     
                            Uri webpage = Uri.parse("http://www.android.com"); 
                            Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);
     
                            context.startActivity(webIntent);
                        }
                        Toast.makeText(context, body, Toast.LENGTH_SHORT).show();
                    }
     
                }
     
            }
        }
     
    }
    J'utilise Eclipse, merci par avance à ceux qui pourront m'aider
    Bonne soirée
    Ludo

  2. #2
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Je suppose que rien ne se passe lorsque tu reçois un sms...

    Attention, une activité étend Activity et non BroadCastReceiver! Ce sont deux choses différentes!
    Voici de la documentation:
    http://developer.android.com/referen.../Activity.html
    http://developer.android.com/referen...tReceiver.html

    Voici exactement ce que tu veux faire:
    http://nbenbourahla.developpez.com/t...eiver-android/

    Tu as juste à remplacer l'affichage du Toast par une ouverture de page Internet si ton sms commence par '#':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("www.android.com")));
    Attention, ce qui suis est la solution. Je te conseille d'essayer avant.

    Donc, en reprenant le code du tuto et en l'adaptant, cela devrait donner le code suivant:

    androidManifest.xml :
    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.sms_web" android:versionCode="1" android:versionName="1.0">
        <uses-sdk android:minSdkVersion="7" />
     
        <application android:icon="@drawable/icon" android:label="@string/app_name">
            <receiver class="com.exemple.sms_web.SMSReceiver"
                android:name="com.exemple.sms_web.SMSReceiver">
                <intent-filter android:priority="100">
                    <action android:name="android.provider.Telephony.SMS_RECEIVED" />
                </intent-filter>
            </receiver>
        </application>
     
        <uses-permission android:name="android.permission.RECEIVE_SMS" />
        <uses-permission android:name="android.permission.READ_SMS" />
    </manifest>
    et le code de ton fichier SMSReceiver.java dans ton package com.exemple.sms_web:
    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
     
    package com.exemple.sms_web;
     
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.telephony.SmsMessage;
    import android.widget.Toast;
     
    public class SMSReceiver extends BroadcastReceiver
    {
    	 private final String   ACTION_RECEIVE_SMS  = "android.provider.Telephony.SMS_RECEIVED";
     
    	 @Override
    	 public void onReceive(Context context, Intent intent)
    	 {
    		 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();
    					if (messageBody.startsWith("#"))
    						context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("www.android.com"))); 
    				 }
    			 }
    		}
    	}
    }
    Attention, ton package contient des underscores (_). Je te conseille de l'enlever et d'ajouter une majuscule au mot suivant. Ce qui donne com.example.smsWeb

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Merci David d'avoir pris le temps de te pencher sur mon problème, je reprends espoir, ça fait une semaine que je rame !
    Je regarde tout ça et te tiens au courant
    Ludo

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    David,
    J'ai toujours le même problème, à savoir que quand j'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Toast.makeText(context, "POKE", Toast.LENGTH_SHORT).show();
    , ça fonctionne bien, "POKE" s'affiche à la réception du SMS mais quand je le remplace par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("www.google.fr")));
    j'ai le message "TEST s'est arrêté OK" et donc pas de lancement du navigateur.
    J'ai ajouté la permission Internet dans la Manifest :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <uses-permission android:name="android.permission.INTERNET"/>
    mais c'est pareil.

  5. #5
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Pouvons nous avoir les Logs du LogCat lors du plantage de l'application?

  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
    Citation Envoyé par blacktigris Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("www.google.fr")));
    A tout hasard, met un http:// devant ton URI sinon ce n'est pas une URI valide (car pas de scheme).
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Merci mais "http://" en + ne règle pas le problème.
    Voici le Logcat:
    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
    02-07 14:05:03.906: D/Gsm/SmsMessage(28923): SMS SC timestamp: 1391778304000
    02-07 14:05:03.906: E/Gsm/SmsMessage(28923): hasUserDataHeader : false
    02-07 14:05:03.961: D/AndroidRuntime(28923): Shutting down VM
    02-07 14:05:03.961: W/dalvikvm(28923): threadid=1: thread exiting with uncaught exception (group=0x40f752a0)
    02-07 14:05:03.961: E/AndroidRuntime(28923): FATAL EXCEPTION: main
    02-07 14:05:03.961: E/AndroidRuntime(28923): java.lang.RuntimeException: Unable to start receiver com.example.test.SMSReceiver: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
    02-07 14:05:03.961: E/AndroidRuntime(28923): 	at android.app.ActivityThread.handleReceiver(ActivityThread.java:2287)
    02-07 14:05:03.961: E/AndroidRuntime(28923): 	at android.app.ActivityThread.access$1600(ActivityThread.java:140)
    02-07 14:05:03.961: E/AndroidRuntime(28923): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1313)
    02-07 14:05:03.961: E/AndroidRuntime(28923): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    02-07 14:05:03.961: E/AndroidRuntime(28923): 	at android.os.Looper.loop(Looper.java:137)
    02-07 14:05:03.961: E/AndroidRuntime(28923): 	at android.app.ActivityThread.main(ActivityThread.java:4921)
    02-07 14:05:03.961: E/AndroidRuntime(28923): 	at java.lang.reflect.Method.invokeNative(Native Method)
    02-07 14:05:03.961: E/AndroidRuntime(28923): 	at java.lang.reflect.Method.invoke(Method.java:511)
    02-07 14:05:03.961: E/AndroidRuntime(28923): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
    02-07 14:05:03.961: E/AndroidRuntime(28923): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
    02-07 14:05:03.961: E/AndroidRuntime(28923): 	at dalvik.system.NativeStart.main(Native Method)
    02-07 14:05:03.961: E/AndroidRuntime(28923): Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
    02-07 14:05:03.961: E/AndroidRuntime(28923): 	at android.app.ContextImpl.startActivity(ContextImpl.java:1049)
    02-07 14:05:03.961: E/AndroidRuntime(28923): 	at android.app.ContextImpl.startActivity(ContextImpl.java:1043)
    02-07 14:05:03.961: E/AndroidRuntime(28923): 	at android.content.ContextWrapper.startActivity(ContextWrapper.java:283)
    02-07 14:05:03.961: E/AndroidRuntime(28923): 	at android.content.ContextWrapper.startActivity(ContextWrapper.java:283)
    02-07 14:05:03.961: E/AndroidRuntime(28923): 	at com.example.test.SMSReceiver.onReceive(SMSReceiver.java:35)
    02-07 14:05:03.961: E/AndroidRuntime(28923): 	at android.app.ActivityThread.handleReceiver(ActivityThread.java:2280)
    02-07 14:05:03.961: E/AndroidRuntime(28923): 	... 10 more
    02-07 14:05:20.481: I/Process(28923): Sending signal. PID: 28923 SIG: 9

  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
    La réponse est là :
    Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
    Modifies ton code comme cela :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.fr"));
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(i);
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Ca marche parfaitement !
    Merci de votre aide précieuse à tous les 2.
    Ludo

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

Discussions similaires

  1. Ouvrir une URL avec fopen
    Par dragonspyro93 dans le forum Langage
    Réponses: 2
    Dernier message: 12/01/2007, 23h20
  2. [Système] Ouvrir une URL
    Par benthebest dans le forum Langage
    Réponses: 37
    Dernier message: 27/08/2006, 23h41
  3. [ASP] Ouvrir une url
    Par castaka dans le forum ASP
    Réponses: 2
    Dernier message: 04/08/2005, 11h02
  4. Ouvrir une URL en C/C++ sous Win32
    Par pykoon dans le forum MFC
    Réponses: 7
    Dernier message: 26/04/2005, 09h08

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