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 :

Service contenant un BroadCastReceiver


Sujet :

Android

  1. #21
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    En effet, je peux être connecté en USB sans monter le disque!
    Dans ce cas peut être que combiner les deux listener t'apportera la solution .

  2. #22
    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 : 35
    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
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    Dans ce cas peut être que combiner les deux listener t'apportera la solution .
    Malheureusement c'est ce que je fais depuis le début, je détecte si le disque est monté:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    IntentFilter filter = new IntentFilter ();
    		filter.addAction (Intent.ACTION_MEDIA_MOUNTED);
    		filter.addAction (Intent.ACTION_MEDIA_UNMOUNTED);
    		filter.addAction (Intent.ACTION_MEDIA_SHARED);
    		filter.addAction (Intent.ACTION_UMS_CONNECTED);
    		filter.addDataScheme("file");
    		registerReceiver (bcr, filter);
    (J'ai tout mis comme ça on est tranquille )

    Et dans le onReceive je teste si l'USB est connecté:
    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
     
    BroadcastReceiver bcr = new BroadcastReceiver ()
    		{
    			@Override
    			public void onReceive (Context context, Intent intent)
    			{
    				int status = intent.getIntExtra ("status",
    						BatteryManager.BATTERY_PLUGGED_AC);
    				if (status == BatteryManager.BATTERY_PLUGGED_USB)
    					if (_global.currentActivity != null)
    					{
    						g.setResult (9);
    						g.finish ();
    					}
    			}
    		};
    Tout ce code est placé dans le onCreate de mon Servcice que j'initialise dans ma première activity comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Intent intent = new Intent ("fr.service.MyService.ACTION");
    startService (intent);
    et dans le manifest j'ajoute bien sure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <service android:enabled="true" android:name="fr.service.MyService">
    			<intent-filter>
    				<action android:name="fr.service.MyService.ACTION" />
    			</intent-filter>
    		</service>

  3. #23
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    essaye de rajouter celui là à ta liste

    public static final String ACTION_MEDIA_CHECKING

    Since: API Level 3
    Broadcast Action: External media is present, and being disk-checked The path to the mount point for the checking media is contained in the Intent.mData field.
    Constant Value: "android.intent.action.MEDIA_CHECKING"

  4. #24
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035

  5. #25
    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 : 35
    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
    Par défaut
    Cela ne fonctionne toujours pas!

    En faite, j'ai l'impression que mon service ne fonctionne pas lorsque j'ouvre une autre application par dessus (ouverture du gestionnaire de montage du disque via l'onglet des notifications)!

    Ce qui fait que lorsque je retourne sur l'application, il me reexecute le onCreate et donc il essaye de relire dans la base SQLite! Sauf que ceci provoque une erreur puisque le disque est monté!

    Donc le plus simple serait, comme nous avons commencé à le faire auparavant, de faire un test dans le onResume (qui lui est appelé si je ne me trompe pas, à la création et à chaque fois que je retourne sur l'activity) ou dans le onCreate pour arreter le programme si le disque est monté.

    C'est la condition si le disque est monté que je n'arrive pas à faire!

  6. #26
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Désolé pas trop le temps de regarder

    Peut être trouvera tu quelque chose t'intéressant la dedans .
    http://www.devdaily.com/java/jwareho...ice.java.shtml

    http://www.androidjavadoc.com/2.3/an...vice.Stub.html

  7. #27
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par David55 Voir le message
    En faite, j'ai l'impression que mon service ne fonctionne pas lorsque j'ouvre une autre application par dessus (ouverture du gestionnaire de montage du disque via l'onglet des notifications)!
    S'il ne fait rien, android le ferme.
    Si tu veux éviter cela, il te faut le mettre en foreground.

  8. #28
    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 : 35
    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
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    Désolé pas trop le temps de regarder
    Pas de soucis je comprend

    Citation Envoyé par Feanorin Voir le message
    Merci pour ces liens, je vais voir ca!

  9. #29
    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 : 35
    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
    Par défaut
    Citation Envoyé par yan Voir le message
    S'il ne fait rien, android le ferme.
    Si tu veux éviter cela, il te faut le mettre en foreground.
    Le mettre en foreground? Comment faire?
    Si je le met en foreground, comment faire pour monter le disque?

  10. #30
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    http://developer.android.com/referen....Notification)

    Le foreground ne changera en rien ta gestion de montage de ton disque, comme te l'as expliqué Yan cela te permettra qu'Android ne ferme pas ton service/application s'il a besoin de mémoire ou s'il juge qu'il est "inutile".

  11. #31
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par David55 Voir le message
    Le mettre en foreground? Comment faire?
    http://developer.android.com/referen...Foreground(int, android.app.Notification)

    Citation Envoyé par David55 Voir le message
    Si je le met en foreground, comment faire pour monter le disque?
    Cela change quoi?
    Une application passé en arrière plan peut être fermé par Android n'importe quand. Mettre un service en foreground, spécifie que l'appli fait quelques chose et ne doit pas être fermée.. Par exemple lors de la lecture d'un mp3.

    J'arrive pas à comprendre ton problème :/. Es ce que déclarer ton broadcast receiver dans le manifest ne serait pas ton besoin? Si l'appli est fermé, il sera relancé pour exécute le receiver.

  12. #32
    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 : 35
    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
    Par défaut
    J'ai essayé de passer par le manifest mais ca ne donne rien!
    Voici mon BroadCast Receiver:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class MountReceiver extends BroadcastReceiver
    {
     
    		@Override
    		public void onReceive (Context context, Intent intent)
    		{
    			int status = intent.getIntExtra ("status",
    					BatteryManager.BATTERY_PLUGGED_AC);
    			if (status == BatteryManager.BATTERY_PLUGGED_USB)
    				Toast.makeText(context, "test", Toast.LENGTH_LONG).show();
    		}
    }
    et dans mon manifest:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <receiver class="fr.elior.Receiver.MountReceiver"
    			android:name="com.tuto.android.MountReceiver">
    			<intent-filter android:priority="100">
    				<action android:name="android.intent.ACTION_MEDIA_MOUNTED" />
    				<action android:name="android.intent.ACTION_MEDIA_UNMOUNTED" />
    				<action android:name="android.intent.ACTION_MEDIA_SHARED" />
    				<action android:name="android.intent.ACTION_UMS_CONNECTED" />
    				<action android:name="android.intent.ACTION_MEDIA_CHECKING" />
    			</intent-filter>
    		</receiver>

    J'arrive pas à comprendre ton problème :/
    Mon problème est que j'utilise une base SQLite et que lorsque je monte mon disque, je n'ai plus accès à celle ci. Donc j'aimerai détecter le fait que mon disque soit monté afin de fermer l'application!

  13. #33
    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 : 35
    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
    Par défaut
    Après mure réflexion et grâce à vos remarques j'ai trouvé une solution plus simple! Tester si on a accès à la base de donnée au début de mes Activity! Et ca fonctionne!


    Merci à vous pour vos idées! Vous êtes des chefs comme d'hab

  14. #34
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par David55 Voir le message
    J'ai essayé de passer par le manifest mais ca ne donne rien!
    Voici mon BroadCast Receiver:
    c'est normale que tu ne vérifie pas le type d'intent reçus?

    Après mure réflexion et grâce à vos remarques j'ai trouvé une solution plus simple! Tester si on a accès à la base de donnée au début de mes Activity! Et ca fonctionne!
    Cool.
    Par contre ça vaut tout de même le coup d'utiliser le receiver pour être notifié d'une déconnexion/connexion. Mais pas besoin de le mettre dans le manifest dans ton cas.

  15. #35
    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 : 35
    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
    Par défaut
    oui je vais tout de même essayer de voir comment le faire fonctionner!

    Merci pour ton aide

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Bind de service par BroadcastReceiver
    Par matwia dans le forum Android
    Réponses: 6
    Dernier message: 23/09/2013, 16h17
  2. [Débutant] Reporting services : Rupture dans un rapport contenant plusieurs matrices.
    Par Balwin dans le forum Services Web
    Réponses: 0
    Dernier message: 02/11/2012, 15h36
  3. Différence entre Service et BroadcastReceiver
    Par Messi007 dans le forum Android
    Réponses: 3
    Dernier message: 07/07/2012, 12h50
  4. [PowerShell] Pb nom d'un service contenant $
    Par Magohamoths dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 07/10/2009, 16h22
  5. Service de nommage java C++
    Par Anonymous dans le forum CORBA
    Réponses: 3
    Dernier message: 15/04/2002, 12h48

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