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 une activity malgré la mise en veille


Sujet :

Android

  1. #1
    Membre régulier
    Homme Profil pro
    Datascientist
    Inscrit en
    Août 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Datascientist
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 248
    Points : 110
    Points
    110
    Par défaut afficher une activity malgré la mise en veille
    bonjour à toutes et à tous,
    comme l'intitulé l'indique, j'aimerai lancer une activity à l'aide d'un Timer et TimerTask() malgré la mise en veille des smartphones, j'arrive à bien utiliser le Timer et le TimerTask(), mais je n'arrive pas à lancer une popup malgré la mise en veille et en 1er plan, un truc qui ressemble à la notification popup de Viber lors de la réception d'un message.

    voilà le 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
    46
    47
    48
    49
    50
    51
    52
    53
     
    ...
    final Handler handler = new Handler();
    	    final Intent intent2 = new Intent(this, doaaActivity.class);
            task = new TimerTask() {
                public void run() {
                    handler.post(new Runnable() {
                        public void run() {
                        	Random r = new Random();
          			int doaparjour = 0 + r.nextInt(99);
     
          			String DoaaT = LireXml(doaparjour);
                        	CreateNotification(DoaaT);             
                            Toast.makeText(MainActivity.this, DoaaT, Toast.LENGTH_SHORT).show();
     
                             LayoutInflater layoutInflater  = (LayoutInflater)getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE);  
     
                             View popupView = layoutInflater.inflate(R.layout.popup, null); 
                             TextView textPop = (TextView)popupView.findViewById(R.id.textPop);
                             textPop.setText(DoaaT);
     
                                 final PopupWindow popupWindow = new PopupWindow(popupView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);  
     
                                 Button btnDismiss = (Button)popupView.findViewById(R.id.dismiss);
                                 btnDismiss.setOnClickListener(new Button.OnClickListener(){
     
                         @Override
                         public void onClick(View v) {
                          popupWindow.dismiss();
                         }});
     
                                 popupWindow.showAtLocation(popupView, Gravity.CENTER, 0, 0);
     
                        }
                    });
                            }};
     
                           if(timer != null){
                                timer.cancel();
                                timer.purge();
                                timer = null;
                                TextView T = (TextView) findViewById(R.id.text_Doaa_res);
     
                                T.setText(checkedTime);
                               }
     
     
                            timer = new Timer();
     
                           // icheckedTime == "1000"                       
                           timer.schedule(task, 0, Long.parseLong(checkedTime));
     
    ...
    est ce qu'il y a un code qui peut forcer l’exécution de ceci (popupWindow.showAtLocation(popupView, Gravity.CENTER, 0, 0) en 1er plan et malgré la mise en veille des smartphones.

    merci bcp

  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 faudra que tu relise la définition d'une mise en veille.

    Lors de la veille, *aucun* programme ne tourne plus. Le CPU est à 0%.
    Les solutions "logicielles" telles que Timer / TimerTask (que je déteste utiliser au passage, préférant les handlers et postDelayed.. pas certain que Timer n'utilise pas ceci d'ailleurs) ne fonctionneront donc pas.
    Pour que les programmes tournent à nouveau, il faut que le téléphone sorte de veille.

    Cela arrive "fréquemment" (comprendre toutes les 15 minutes).
    Mais cela peut être déclenché:
    * Depuis le téléphone lui-même à une heure précise (arrivée d'une alarme demandant un réveil instantané) => AlarmManager.
    * Depuis un serveur externe, par réception d'un message "push" => Google Cloud Messaging.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre régulier
    Homme Profil pro
    Datascientist
    Inscrit en
    Août 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Datascientist
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 248
    Points : 110
    Points
    110
    Par défaut
    Merci beaucoup pour votre réponse utile,

    si vous avez viber installer sur votre smartphone, vous avez bien évidement remarqué que lors de l'arrivée d'un message il s'affiche sur votre écran même si le téléphone est en veille, et cela signifie qu'il y a un programme qui tourne lors de la veille, j'ai vu ceci au niveau de plusieurs app Android.

    j'ai trouvé cette instruction sur le net (setKeepScreenOn() ) qui désactive la mise en veille, mais je n'ai pas trouvé à ce moment comment je peux lancer une activité qui affiche un popup à un moment donné à l'aide d'un timer ou handler, même si l'app n'est pas en 1er plan.

    mes questions sont les suivantes :
    1- est ce qu'il y a un code qui permet l’exécution en background et qui permet d'afficher un popup même si le téléphone est en veille ?
    2- est ce que AlarmManager résoudra mon problème ?

    Merci beaucoup

  4. #4
    Membre régulier
    Homme Profil pro
    Datascientist
    Inscrit en
    Août 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Datascientist
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 248
    Points : 110
    Points
    110
    Par défaut
    bonjour à toutes et à tous,

    jusqu'à maintenant j'ai pu trouver une solution pour exécuter en background, on utilisant les services et la permission WAKE_LOCK, j'ai changé aussi la commande timer par AlarmManager, mais malheureusement je ne trouve pas de solution pour afficher la popup (exécuter une activité et l'affichée en 1er plan comme la popup viber).

    alors j'ai besoin de vos idées pour permettre l'affichage de la popup en 1er plan, même si j'ai fermé l'app ou bien même si mon téléphone et en veille.

    Merci bcp les ami(e)s

  5. #5
    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
    WAKE_LOCK ne doit être maintenu que pendant un *très* court laps de temps (max 1 ou 2s) hein ! Sinon, c'est la fin de la batterie assurée.

    Sinon, il faut relire mon message, j'explique les deux moyens d'y arriver:
    * Depuis le téléphone lui-même à une heure précise (arrivée d'une alarme demandant un réveil instantané) => AlarmManager.
    * Depuis un serveur externe, par réception d'un message "push" => Google Cloud Messaging.

    Si vous voulez je peux développer la notion de GCM:

    * Le téléphone (et l'application) s'enregistre auprès du service distant (donc un serveur lambda quelque part), avec un identifiant GCM.
    * Un serveur a besoin d'envoyer d'afficher un message sur l'écran d'un téléphone, il envoie à GCM le message à destination de cet identifiant.
    * GCM va faire les opérations nécessaires pour "réveiller" le téléphone correspondant, et lui envoyer le message.
    * L'application va recevoir le message (Listener) pendant cette phase de réveil.
    * L'application peut alors afficher un popup (activity).


    Ensuite le problème est comment afficher une activité au dessus d'un lock-screen... c'est simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);  
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
    Ne pas oublier de quitter l'activité automatiquement après X secondes, sinon... batterie vide en moins de 2h
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/12/2011, 15h49
  2. Mise en veille via une touche
    Par Bissada dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 27/01/2007, 13h44
  3. Réallumage écran après une mise en veille
    Par arzew dans le forum Windows XP
    Réponses: 2
    Dernier message: 27/11/2006, 14h16
  4. Réponses: 15
    Dernier message: 22/04/2006, 14h59
  5. Comment interdire la mise en veille d'une machine sous Win ?
    Par Soulama dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 01/08/2005, 15h37

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