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 :

Gerer la rotation d'ecran à partir d'un Service


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Par défaut Gerer la rotation d'ecran à partir d'un Service
    Bonjour à la communauté,

    Tout d'abord, je souhaite une bonne année a tout les lecteur de ce post.

    Je suis actuellement désespéramment à la recherche d'une solution pour résoudre un problème de rotation d’écran sur Android.

    Je m'explique, je suis occuper à construire une application du type "App Locker" comme on peut en trouvé des centaine sur le playstore. Jusqu'ici, tout fonctionne parfaitement, je dirai même que mon application est terminé a l'exception d'un dernier problème.

    J'ai un fichier Service qui enregistré dans mon Manifest.xml en tant que <receiver>.

    Ce service vérifie le package actuellement en cours sur l'écran de l'appareil, et si le package et marqué en tant que bloquer dans mon application à moi, alors le LockService ce met en route et une page s'affiche par dessus l'application bloqué afin de la débloquer pour y avoir accès.

    Le problème avec mon service et qu'il prend en compte l'orientation écran autorisé par l'application qu'elle surpasse plutôt que de gardé le mode portrait.

    Voici le code pour affiché mon dialogue par dessus les autre écran.

    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
    void showUnlockDialog() {
            /*Intent i = new Intent(AppCheckServices.this, UnlockAppActivity.class);
            startActivity(i);*/
     
            if (context == null)
                context = getApplicationContext();
     
            LayoutInflater layoutInflater = LayoutInflater.from(context);
            View promptsView = layoutInflater.inflate(R.layout.popup_unlock, null);
            Lock9View lock9View = (Lock9View) promptsView.findViewById(R.id.lock_9_view);
            final FrameLayout frameLayout = (FrameLayout) promptsView.findViewById(R.id.cardads_nativeAds);
            final LinearLayout linearLayout = (LinearLayout) promptsView.findViewById(R.id.lock_ic_launcher);
     
            lock9View.setGestureCallback(new Lock9View.GestureCallback() {
                @Override
                public void onNodeConnected(@NonNull int[] numbers) {
     
                }
     
                @Override
                public void onGestureFinished(@NonNull int[] numbers) {
                    StringBuilder builder = new StringBuilder();
                    for (int number : numbers) {
                        builder.append(number);
                    }
     
                    if (builder.toString().matches(sharedPreference.getPassword(context))) {
                        dialog.dismiss();
                    } else {
                        frameLayout.startAnimation(AnimationUtils.loadAnimation(context, R.anim.shake));
                        linearLayout.startAnimation(AnimationUtils.loadAnimation(context, R.anim.shake));
                    }
                }
            });
     
            int LAYOUT_FLAG;
            if (Build.VERSION.SDK_INT >= 26) {
                LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
            } else {
                LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_PHONE;
            }
     
            dialog = new Dialog(context, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
            dialog.setCanceledOnTouchOutside(false);
            dialog.setCancelable(false);
            dialog.getWindow().setType(LAYOUT_FLAG);
            dialog.setContentView(promptsView);
            dialog.getWindow().setGravity(Gravity.CENTER);
     
            dialog.setOnKeyListener(new Dialog.OnKeyListener() {
                @Override
                public boolean onKey(DialogInterface dialog, int keyCode,
                                     KeyEvent event) {
                    if (keyCode == KeyEvent.KEYCODE_BACK
                            && event.getAction() == KeyEvent.ACTION_UP) {
                        Intent startMain = new Intent(Intent.ACTION_MAIN);
                        startMain.addCategory(Intent.CATEGORY_HOME);
                        startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(startMain);
                    }
                    return true;
                }
            });
     
            dialog.show();
        }
    J'ai essayer d’après toute mes recherche en ajoutant cela dans le code mais ca n'a pas fonctionner non plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dialog.RequestWindowFeature(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
    J'ai également essayer en démarrant une activité au lieu d'afficher le dialogue en y ajoutant le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Intent i = new Intent(AppCheckServices.this, UnlockAppActivity.class);
            startActivity(i);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @Override
        public void onConfigurationChanged(Configuration newConfig) {
            super.onConfigurationChanged(newConfig);
     
            int orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
            // or = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
            setRequestedOrientation(orientation);
        }
    Avec la seconde solution, mon cadre de Lock s'affiche bien en mode portrait, peut importe l'orientation de l'application qu'elle surpasse, mais cela ajoute mon application dans la dernière application ouverte du taskmanager et du coup mon lock service ne cesse d’apparaître même après avoir débloquer.

    Quelqu'un aurait-il la solution afin de pouvoir géré la rotation de l'écran à partir d'un Service ?

    Bien à vous,
    Jeremy

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 476
    Par défaut
    Question toute bête, pourquoi vouloir absolument une dialog en mode portrait ? tu pourrais faire un layout de ta dialog en portrait et en paysage, et ainsi tu auras un design adapté.

    Après, faut garder en tête qu'un Service est une Activity sans vue, donc des methodes comme RequestWindowFeature ne sont pas gérer en dehors d'une activité. Ce que je te conseillerais, c'est que ton Service appelle une Activité qui soit bloquée en mode portrait (soit dans le manifest ou dans le code) et qui gère ta dialog

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Par défaut
    Bonjour Turvy,

    Merci pour votre répone, je tient à préciser que ma page ne présente pas correctement en mode paysage sur certaint appareils car l'espace octroyer à ma page et beaucoup trop petite pour y afficher ce que je dois y afficher.

    Cependant j'ai enfin réussi de forcer mon screen d’écran de verrouillage en mode portrait quand elle surpasse les autres application sans crée une autre activité.

Discussions similaires

  1. fragment not afficher apres rotation d'ecran
    Par hamzawii dans le forum Android
    Réponses: 0
    Dernier message: 19/06/2012, 21h05
  2. Gerer plusieurs controles asp.net à partir de c#
    Par Lordalibaba dans le forum ASP.NET
    Réponses: 4
    Dernier message: 07/12/2010, 15h10
  3. Gerer messages a l'ecran
    Par davidporto01 dans le forum C
    Réponses: 5
    Dernier message: 04/12/2007, 18h50
  4. comment piloter l'ecran à partir de delphi?
    Par sam80 dans le forum Delphi
    Réponses: 3
    Dernier message: 18/04/2007, 04h23
  5. PB d'écriture sur MSSQLServer à partir d'un service
    Par Dunsany dans le forum Bases de données
    Réponses: 31
    Dernier message: 21/08/2004, 15h25

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