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