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 :

Afficher les préférences depuis un évènement


Sujet :

Android

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Afficher les préférences depuis un évènement
    Bonjour a vous.
    Je tiens juste à préciser que je suis un débutant en java / android, il y a donc surement des boulettes qui traine dans mon code décrit,
    je recherche désespérément depuis 2 jours sans rien trouver, pour afficher un preferencescreen suite à un événement.
    En gros je souhaite créer un service, qui se lance au boot du téléphone cela fonctionne bien :
    le code "d'écoute" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class OnReceiver extends BroadcastReceiver {
     
        @Override
        public void onReceive(Context context, Intent intent) {
        	Log.d("TestApp", "juju : " + intent.getAction());
     
        	if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) { 
                Log.d("TestApp", "Got the Boot Event>>>");
                Log.d("TestApp", "Starting MySimpleService>>>");
                context.startService(new Intent().setComponent(new ComponentName(context.getPackageName(), MonService.class.getName())));
           }
    //code à rajouter
    }
    le code du service :
    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
     
    public class MonService extends Service {
     
        public MonService() {
        }
     
        @Override
        public IBinder onBind(Intent arg0) {
            // TODO Auto-generated method stub
            return null;
        }
     
        @Override
        public void onRebind(Intent intent) {
            super.onRebind(intent);
            Log.d("TestApp", ">>>onRebind()");
        }
     
        @Override
        public void onCreate() {
            super.onCreate();
            Log.d("TestApp", ">>>onCreate()");
        }
     
        @Override
        public void onStart(Intent intent, int startId) {
            super.onStart(intent, startId);
            Log.d("TestApp", ">>>onStart()");
        }
     
        @Override
        public boolean onUnbind(Intent intent) {
            return super.onUnbind(intent);
        }
    jusque là tout va bien.
    et quand mon service est lancé j'aimerai pouvoir le paramétrer, pour cela j'ai pensé à un truc qui serait bien sympa :
    composer un numéro de téléphone, type code pin, et à l'appuie du bouton call, on regarde le numéro et, à la suite de cela soit la communication se fait, soit on la coupe pour afficher ensuite les préférences, c'est là que ca se gâte...
    j'ai suivit un tuto qui fonctionne parfaitement pour afficher des préférences, puis ajouté un peu de code "d'écoute"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if ("android.intent.action.NEW_OUTGOING_CALL".equals(intent.getAction())) { 
     
                Log.d("TestApp", "APPEL Got the Boot Event>>>" +  getResultData());
     
                String number = getResultData();
                if(number.equals("1234")){
     
                }
    Seulement dans ma dernière condition if, je ne peux pas mettre le bout de code du tuto
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addPreferencesFromResource(R.xml.prefs);
    car la class n'est pas une extension de "PreferenceActivity" mais "BroadcastReceiver"

    j'ai donc créé une nouvelle class comme dans le tuto par contre je n'ai rien fait la concernant dans le manifest :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class PrefsActivity extends PreferenceActivity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
        	super.onCreate(savedInstanceState);
        	addPreferencesFromResource(R.xml.prefs);
        }
    }
    et maintenant je cherche a appeler cette class, pour m'afficher les prefs... et là je seche.
    j'ai testé ceci en me doutant du résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    PrefsActivity Pref = new PrefsActivity();
    Pref.onCreate(null);
    et évidement cela plante avec les log que voici :
    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
     
    04-25 13:07:18.383: D/TestApp(340): juju : android.intent.action.NEW_OUTGOING_CALL
    04-25 13:07:18.383: D/TestApp(340): APPEL Got the Boot Event>>>258
    04-25 13:07:18.383: D/TestApp(340): APPEL Starting MySimpleService>>>
    04-25 13:07:18.804: D/AndroidRuntime(340): Shutting down VM
    04-25 13:07:18.804: W/dalvikvm(340): threadid=1: thread exiting with uncaught exception (group=0x40015560)
    04-25 13:07:18.843: E/AndroidRuntime(340): FATAL EXCEPTION: main
    04-25 13:07:18.843: E/AndroidRuntime(340): java.lang.RuntimeException: Unable to start receiver com.note.OnReceiver: java.lang.NullPointerException
    04-25 13:07:18.843: E/AndroidRuntime(340): 	at android.app.ActivityThread.handleReceiver(ActivityThread.java:1805)
    04-25 13:07:18.843: E/AndroidRuntime(340): 	at android.app.ActivityThread.access$2400(ActivityThread.java:117)
    04-25 13:07:18.843: E/AndroidRuntime(340): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:981)
    04-25 13:07:18.843: E/AndroidRuntime(340): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    04-25 13:07:18.843: E/AndroidRuntime(340): 	at android.os.Looper.loop(Looper.java:123)
    04-25 13:07:18.843: E/AndroidRuntime(340): 	at android.app.ActivityThread.main(ActivityThread.java:3683)
    04-25 13:07:18.843: E/AndroidRuntime(340): 	at java.lang.reflect.Method.invokeNative(Native Method)
    04-25 13:07:18.843: E/AndroidRuntime(340): 	at java.lang.reflect.Method.invoke(Method.java:507)
    04-25 13:07:18.843: E/AndroidRuntime(340): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    04-25 13:07:18.843: E/AndroidRuntime(340): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    04-25 13:07:18.843: E/AndroidRuntime(340): 	at dalvik.system.NativeStart.main(Native Method)
    04-25 13:07:18.843: E/AndroidRuntime(340): Caused by: java.lang.NullPointerException
    04-25 13:07:18.843: E/AndroidRuntime(340): 	at android.app.Activity.onCreate(Activity.java:802)
    04-25 13:07:18.843: E/AndroidRuntime(340): 	at android.preference.PreferenceActivity.onCreate(PreferenceActivity.java:105)
    04-25 13:07:18.843: E/AndroidRuntime(340): 	at com.note.PrefsActivity.onCreate(PrefsActivity.java:10)
    04-25 13:07:18.843: E/AndroidRuntime(340): 	at com.note.OnReceiver.onReceive(OnReceiver.java:68)
    04-25 13:07:18.843: E/AndroidRuntime(340): 	at android.app.ActivityThread.handleReceiver(ActivityThread.java:1794)
    04-25 13:07:18.843: E/AndroidRuntime(340): 	... 10 more
    voilà en espérant avoir été clair dans la description de mon besoin, je fais donc appel à votre savoir faire.
    En vous remerciant par avance
    Julien

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Il te faut un "Intent" pour démarrer une activité... quelle qu'elle soit...

    Donc:
    1. Déclarer l'activité dans le manifest.
    2. Y spécifier les "intent" auxquels elle répondra (en général un intent privé)
    3. Dans le code du service, créer l'intent ad-hoc (en général new Intent(context,"nom de l'intent"))
    4. Appeler context.startActivity(intent);
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    Merci pour la réponse.
    J'ai dans un premier temps déclaré l'activity dans le 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
     
    <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
     
            <receiver class="com.note.OnBootReceiver"
                android:name=".OnReceiver">
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                </intent-filter>
                <intent-filter>
                    <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
                </intent-filter>
            </receiver>
     
     
              <service android:name=".MonService" android:enabled="true" 
                   android:exported="false" android:label="MonService" />
              <activity android:name=".PrefsActivity"
                  android:label="@string/app_name"></activity> 
        </application>
    puis modifier le code dans le receiver, et non pas le service :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     if(number.equals("123")){
                	setResultData(null);
                	Intent monIntent = new Intent(context, PrefsActivity.class);
                	context.startActivity(monIntent)
                }
    et j'ai meme fait ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     if(number.equals("123")){
                	setResultData(null);
                	context.startActivity(new Intent().setComponent(new ComponentName(context.getPackageName(), PrefsActivity.class.getName())));
                }
    Par manque de temps je n'ai pu m'investir plus longtemps dans mes recherches sur cette piste, en effet j'ai un gros message d'erreur qui m’arrête tout mon projet dans l’émulateur. je ne sais pour quelle raison il redémarre, une seconde et dernière fois tout seul jusqu'à ce que je retente de le faire planter.
    j'ai le sentiment, que ce soit le fait de lancer un appel qui m’empêche de lancer mon activity

    Dans tous les cas je vais continué dans cette direction, en essayant de mieux me familiariser avec les intents un projet fictif pour tester, et je ferrai un retour qu'il soit positif ou négatif...

    Bonne soirée

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    Voilà je viens apporter la solution (qui fonctionne pour le moment avec helloworld, il me faut tester avec mes pref maintenant). J'ai fini par trouvé, et tu m'as bien guidé, il manquait juste une petite chose....

    Donc comme je disais, j’avais toujours une erreur.
    je me suis dis je vais donc tenter de faire un thread, et à son lancement, un petit sleep de 10 secondes au départ, pour vois ce qui se passe.
    j'ai à ce moment là un autre message d'erreur, mais un peu plus expicite avec une ligne de log qui ma bien servie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    E/AndroidRuntime(342): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
    j'ai donc taper sur notre ami Google "tuto android afficher message suite appel FLAG_ACTIVITY_NEW_TASK "
    et une personne avait besoin de la meme chose que moi, affichier une activity via un appel : ici

    tu me proposais donc ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     public void onReceive(final Context context, Intent intent) {
        	if ("android.intent.action.NEW_OUTGOING_CALL".equals(intent.getAction())) { 
     
                String number = getResultData();
                if(number.equals("123")){
                	setResultData(null);
                	Intent monIntent = new Intent(context, PrefsActivity.class);
                	context.startActivity(monIntent);
                }
    alors qu'il me manquait une ligne à mettre juste avant le startActivity
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    Voilà merci bien
    bon wekend à tous
    Cordialement
    julien

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    bon hé bien pour les préférence ca fonctionne bien également...
    encore une fois merci

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/04/2012, 07h38
  2. Réponses: 0
    Dernier message: 30/12/2011, 15h01
  3. Réponses: 5
    Dernier message: 20/03/2011, 11h17
  4. afficher les messages printf depuis une dll
    Par keenan dans le forum C++
    Réponses: 2
    Dernier message: 16/01/2008, 09h22
  5. afficher les informations texte depuis mysql
    Par arti2004 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 26/02/2006, 16h54

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