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 et AlarmManager


Sujet :

Android

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 33
    Points : 31
    Points
    31
    Par défaut Service et AlarmManager
    Bonsoir tout le monde,
    Je viens encore une fois vers vous, je commence les choses sérieuses (enfin en fonction de mon niveau de débutant) avec android. J'aimerai ajouter quelques fonctionnalités à l'app que je suis entrain de développer comme par exemple notifier (je parle pas des notifications push bien sûre) l'utilisateur chaque deux jours après sa dernière de visite du genre InstaMessage.
    Pour l'instant j'essaie de comprendre de bien comprendre comme fonctionne les services mais j'ai quelques petites inquiétudes:

    Est-il possible possible de démarrer un service juste avant l'arrêt d'une application?
    j'ai reussi à créer une notification juste après quelques secondes du démarrage de l'app.
    J'espère que je me suis fait comprendre et merci d'avance pour vos reponses

  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
    Pourquoi démarrer un Service juste avant la "mort" (il n'y a jamais vraiment de "mort" dans Android) d'une application ?

    L'application peut très bien demander d'être notifiée par le système dans X minutes (15j par exemple).
    Attention, un reboot du téléphone = reset du AlarmManager. Pour palier à cela il faut répondre au "BOOT_COMPLETED" (ou un truc du genre) broadcast, et remettre les alarmes (par exemple en les ayant stockées dans des SharedPreferences).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 33
    Points : 31
    Points
    31
    Par défaut
    Merci pour ta réponse nicroman.
    Je veux créer une notification deux (2) jours après la dernière visite de l'utilisateur.
    pour l'instant je fais des testes pour que ça puise fonctionner avec une alarme et des broadcastReceiver:
    quand j'appuie sur le bouton 'start' je crée une notification après 5 secondes
    voici mon code:
    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
     
    public void onReceive(Context context, Intent intent)
    		{
    			Toast.makeText(context, intent.getStringExtra("hello"), Toast.LENGTH_SHORT).show();
     
    			NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
     
    			NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext());
    			Notification notif = builder
    					.setSmallIcon(R.drawable.james)
    					.setContentText("ça marche a la merveille")
    					.setContentTitle("boulbi 92i")
    					.setWhen(System.currentTimeMillis()).build();
    			notif.flags = Notification.FLAG_AUTO_CANCEL;
     
    			manager.notify(0, notif);
     
    		}
     Button start = (Button)findViewById(R.id.button1);
            start.setOnClickListener(new OnClickListener()
            {
     
    			@Override
    			public void onClick(View arg0)
    			{
    				if(!test)
    				{
    					Intent hello = new Intent("ACTION_HELLO");
    					hello.putExtra("hello", "Bonjour tout le monde");
     
    					AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE);
    					PendingIntent pending = PendingIntent.getBroadcast(MainActivity.this, 0, hello, 0);
     
    					//Calendar call = Calendar.getInstance();
    					//call.set(Calendar.SECOND, 20);
     
    					alarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5000, pending);
    				}
    				else
    					Toast.makeText(MainActivity.this, "Le service est deja en cours", Toast.LENGTH_SHORT).show();
     
    				test = true;
    			}
     
            });
    Ce code fonctionne bien mais une fois que j'appuie sur le bouton et immédiatement je sors de l'application la notification n'apparaitra au bout des 5 secondes.
    Je sais pas ce que j'ai pas fais mais toute aide sera la bienvenue.
    cordialement

  4. #4
    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
    Le broadcast receiver a bien été enregistré dans le manifest de l'application ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 33
    Points : 31
    Points
    31
    Par défaut
    Non je l'avais pas fais mais maintenant que je l'ai fais c'est toujours la même chose

  6. #6
    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
    on peut voir la déclaration dans le manifest ? le broadcast receiver (l'implémentation complete) ? et surtout le setInexact du AlarmManager (avec l'intent) ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 33
    Points : 31
    Points
    31
    Par défaut
    Bonjour nicroman,
    Désolé pour le retard j'avais un autre problème avec ma connexion.
    Voici mon code complet:
    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
     
    public class MainActivity extends ActionBarActivity {
     
    	public final static String TAG = "TAG";
     
    	private boolean test;
     
    	Receiver receiver;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
     
            test = false;
     
            Button start = (Button)findViewById(R.id.button1);
            start.setOnClickListener(new OnClickListener()
            {
     
    			@Override
    			public void onClick(View arg0)
    			{
    				if(!test)
    				{
    					Intent hello = new Intent("ACTION_HELLO");
    					hello.putExtra("hello", "Bonjour tout le monde depuis le broadcast");
     
    					AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE);
    					PendingIntent pending = PendingIntent.getBroadcast(MainActivity.this, 0, hello, 0);
     
    					//Calendar call = Calendar.getInstance();
    					//call.set(Calendar.SECOND, 20);
     
    					alarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 8000, pending);
    				}
    				else
    					Toast.makeText(MainActivity.this, "Le service est deja en cours", Toast.LENGTH_SHORT).show();
     
    				test = true;
    			}
     
            });
    }
    Receiver.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class Receiver extends BroadcastReceiver{
     
    	public void onReceive(Context context, Intent intent)
    	{
    		Toast.makeText(context, intent.getStringExtra("hello"), Toast.LENGTH_SHORT).show();
     
    		Intent service = new Intent(context, MonService.class);
    		context.startService(service);
    	}
     
    }
    MonService.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
     
    public class MonService extends Service{
     
    	public class MonBinder extends Binder
    	{
    		MonService getService()
    		{
    			return MonService.this;
    		}
    	}
     
     
    	@Override
    	public IBinder onBind(Intent arg0) {
    		// TODO Auto-generated method stub
    		return new MonBinder();
    	}
     
     
    	public void onCreate()
    	{
    		super.onCreate();
    		Toast.makeText(getApplicationContext(), "Creation", Toast.LENGTH_SHORT).show();
    		NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
     
    		NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext());
    		Notification notif = builder
    				.setSmallIcon(R.drawable.james)
    				.setContentText("ça marche a la merveille")
    				.setContentTitle("boulbi 92i")
    				.setWhen(System.currentTimeMillis()).build();
    		notif.flags = Notification.FLAG_AUTO_CANCEL;
    		manager.notify(0, notif);
    	}
    }
    Manifest..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
     
    <service
                android:name="MonService"
                android:exported="false"
                >
     
            </service>
            <receiver android:name="Receiver" android:exported="false">
                <intent-filter>
                    <action
                        android:name="ACTION_HELLO"
                        >
                    </action>
                </intent-filter>
            </receiver>
    Maintenant j'ai la notification après les 8 secondes même si je sors de l'application bien avant, mais j'ai constaté un autre souci:
    je reçois des notifications plusieurs fois quand l'application n'est pas ouverte. je pense bien avec ce code je suis censé recevoir la notification qu'une seule fois puisque j'utilise les alarmes uniques. C'est comme si d'autres applications ont accès à mon receiver. Normalement ce code dans mon manifest:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    android:exported="false"
    devait bloqué cette possibilité?
    Cordialement

Discussions similaires

  1. Questions concernant Service/AlarmManager
    Par Dyz3r dans le forum Android
    Réponses: 4
    Dernier message: 09/05/2013, 21h29
  2. naming service
    Par manuel dans le forum CORBA
    Réponses: 6
    Dernier message: 09/12/2002, 17h43
  3. [VB6] Lancer un service, par exemple Sql Server
    Par fea dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/10/2002, 14h07
  4. develloppement avec ORBit: service d'evenement
    Par belmontv dans le forum CORBA
    Réponses: 3
    Dernier message: 06/06/2002, 22h56
  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