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 :

Problème avec BroadcastReceiver


Sujet :

Android

  1. #1
    Membre confirmé Avatar de Caranille
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2013
    Messages : 117
    Par défaut Problème avec BroadcastReceiver
    Bonsoir tous le monde,

    Voilà j'ai un étrange problème :p j'ai un BroadcastReceiver qui lance un service au démarrage du téléphone (Et ça fonctionne) mais que pendant 5 à 10 secondes maximum au dela plus rien ne se passe comme si le service était terminé

    Sauf que si je lance le service depuis mon application (La Mainactivity) et que je ferme mon programme le service continue et redémarre si besoins...

    Je ne comprends pas pourquoi le service lancé par le BroadcastReceiver se stop au bout de quelques secondes alors que lancé depuis l'application même aucun soucis

    Voici le BroadcastReceiver

    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
    package com.caranille.myownpet.Kernel;
     
    import android.content.BroadcastReceiver;
    import android.content.ComponentName;
    import android.content.Context;
    import android.content.Intent;
    import android.widget.Toast;
     
    import com.caranille.myownpet.MainActivity;
     
    public class KernelReceiver extends BroadcastReceiver
    {
        @Override
        public void onReceive(Context context, Intent intent)
        {
            Toast.makeText(context, "Votre Pet est heureux de vous revoir !" , Toast.LENGTH_LONG).show();
            Intent serviceIntent = new Intent(context, KernelService.class);
            context.startService(serviceIntent);
        }
    }
    Voici le 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
    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
    package com.caranille.myownpet.Kernel;
     
    import android.app.IntentService;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.app.Service;
    import android.app.TaskStackBuilder;
    import android.content.Context;
    import android.content.Intent;
    import android.os.IBinder;
    import android.support.annotation.Nullable;
    import android.support.v7.app.NotificationCompat;
    import android.util.Log;
     
    import com.caranille.myownpet.DB.DBPetManage;
    import com.caranille.myownpet.MainActivity;
    import com.caranille.myownpet.Models.Pets;
    import com.caranille.myownpet.Models.Trainers;
    import com.caranille.myownpet.R;
     
    import java.util.Timer;
    import java.util.TimerTask;
     
    public class KernelService extends Service
    {
        private Timer timer = new Timer();
        private int i = 0;
     
        static String name = "KernelService";
        static DBPetManage dbPetManage;
        static Pets pets;
        static Trainers trainers;
     
        @Override
        public void onCreate()
        {
            super.onCreate();
            Notification("Démarrage du service");
            timer.scheduleAtFixedRate(new TimerTask() {
                @Override
                public void run() {
                    Refresh();
                }
            }, 0, 1000);
        }
     
        public int onStartCommand(Intent intent, int flags, int startId)
        {
            Notification("Redémarrage du service");
            super.onStartCommand(intent, flags, startId);
            return START_STICKY;
        }
     
        @Override
        public void onDestroy() {
            Notification("Fermeture du service");
            super.onDestroy();
        }
     
        @Nullable
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
     
        public void Refresh()
        {
            i++;
            Notification("Refresh " + i);
            //Mes calculs dont je cache le code
        }
     
        public void Notification(String message)
        {
            NotificationCompat.Builder mBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(this).setSmallIcon(R.drawable.pet).setContentTitle("MyOwnPet").setContentText(message);
            Intent resultIntent = new Intent(this, KernelService.class);
            TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
            stackBuilder.addParentStack(MainActivity.class);
            stackBuilder.addNextIntent(resultIntent);
            PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT );
            mBuilder.setContentIntent(resultPendingIntent);
            NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            mNotificationManager.notify(1, mBuilder.build());
        }
    }
    Et 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
    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
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.caranille.myownpet">
     
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
        <uses-permission android:name="android.permission.BLUETOOTH" />
        <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
        <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
     
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
     
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity
                android:name=".RegisterActivity"
                android:screenOrientation="portrait" />
            <activity
                android:name=".MainPetStatsActivity"
                android:screenOrientation="portrait" />
            <activity
                android:name=".TrainingPetActivity"
                android:screenOrientation="portrait" />
            <activity
                android:name=".MainPetActivity"
                android:screenOrientation="portrait" />
            <activity android:name=".ArenaActivity"></activity>
     
            <service
                android:enabled="true"
                android:name="com.caranille.myownpet.Kernel.KernelService">
            </service>
     
            <receiver
                android:name="com.caranille.myownpet.Kernel.KernelReceiver"
                android:enabled="true"
                android:exported="true">
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                    <action android:name="android.intent.action.REBOOT" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </receiver>
        </application>
     
    </manifest>
    Il s'agit d'un tamagoshi et toutes les x secondes cela met à jour la stats de faim et de soif de l'animal

    Voilà je viens ici en espérant comprendre pourquoi mon service se stop si il est lancé avec le BroadcastReceiver alors qu'avec l'application en elle même avec le code suivant cela fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    startService(new Intent(MainActivity.this, KernelService.class));
    P.S: Après avoir analysé le code je vois que mon application est bien lancé et que au bout de X secondes celle-ci s'arrête (Car dans les info de mon appli j'ai le bouton arrêter l'application qui est non grisé et au bout de 8 secondes il est grisé cela me prouve que mon application et mon service se stop net... alors que sur l'émulateur Android cela fonctionne à merveille...) et le pire dans tout ça ? C'est que sur ma tablette Android cela fonctionne aussi le problème vient de mon smartphone... Pourtant même version Android

    Cordialement,

  2. #2
    Membre confirmé Avatar de Caranille
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2013
    Messages : 117
    Par défaut
    Bonjour,

    Personne n'as d'idée à ce problème :p

    Au pire je ne fais plus de démarrage automatique mais cest dommage

    Cordialement,

  3. #3
    Membre confirmé Avatar de Caranille
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2013
    Messages : 117
    Par défaut
    Bonjour,

    Je remonte le topic car je n'ai malheureusement toujours pas trouvé la solution

    Merci de votre aide par avance

    Cordialement,

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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