J'ai une expérience utilisateur incohérente en raison de la façon dont Android revient à partir des paramètres Android.

Dans mon application, l'utilisateur doit donner à mon application l'accès à ACTION_USAGE_ACCESS_SETTINGS, auquel j'accède avec les éléments suivants:

Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

Après avoir activé le paramètre pour mon application, j'ai besoin que l'utilisateur revienne à mon application. La seule façon de faire cela que je connaisse est pour eux d'appuyer sur le bouton retour du téléphone (j'aimerais savoir s'il est possible de revenir automatiquement après que le paramètre a été basculé !!!?!).

Maintenant, l'une des deux choses se produira:

1) L'utilisateur n'a pas utilisé les paramètres Android récemment, il n'était donc pas déjà ouvert (c'est-à-dire ouvert dans le tiroir d'application ouvert). La première pression sur le bouton de retour les amènera à mon application comme vous le souhaitez.

2) L'utilisateur avait utilisé les paramètres Android récemment. Ainsi, les paramètres étaient déjà ouverts dans le tiroir d'applications. Maintenant, lorsque l'utilisateur appuie sur, Android les ramènera à travers chaque page de configuration qu'ils avaient utilisée récemment (c'est-à-dire que le bouton de retour les fait parcourir leur historique dans les pages de paramètres Android). Cela peut prendre 2, 3 ou 4 pressions sur le bouton Retour pour quitter les paramètres Android et revenir à mon application. C'est évidemment terrible UI / UX, et je me demandais s'il y avait un meilleur moyen?

J'ai remarqué que lors de l'installation des applications Google, après avoir basculé le paramètre sur ON, il se ferme automatiquement et revient à l'application qui a appelé le paramètre. Être capable de le faire serait idéal, mais je ne peux tout simplement pas y arriver.

Merci!

7
Geordie Wicks 23 nov. 2017 à 03:09

4 réponses

Meilleure réponse

Ok, donc après avoir essayé des millions de choses, j'ai trouvé 3 façons différentes d'améliorer mon problème.

1) A été fourni par @CommonsWare, en supprimant le FLAG_ACTIVITY_NEW_TASK, il a empêché un nombre incohérent de contre-pressions nécessaires, et signifie que chaque fois que l'utilisateur n'aurait qu'à appuyer deux fois.

2) Après des recherches plus poussées sur les drapeaux, j'ai trouvé qu'en utilisant trois combinés:

Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                    intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
                    startActivity(intent);

Réduit le nombre de contre-pressions nécessaires à 1 simple contre-pression. C'est simple et convivial.

3) Utilisation d'un gestionnaire pour vérifier en permanence l'autorisation requise après le déclenchement de l'intention des paramètres. Cela semble un peu un hack, et je ne peux pas croire qu'il n'y ait pas de meilleur moyen de le faire, mais cela fonctionne exactement comme cela fonctionne lorsque vous utilisez une application Google. C'est-à-dire que dès que vous activez la bascule, elle quitte la page Paramètres Android et retourne à votre application, là où vous vous étiez arrêté. J'utilise:

Handler handler = new Handler();

Runnable checkSettingOn = new Runnable() {

    @Override
    //@TargetApi(23)
    public void run() {
        Log.d(TAG, "run: 1");
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
            Log.d(TAG, "run: 2");
            return;
        }
        if (isAccessGranted()) {
            Log.d(TAG, "run: 3");
            //You have the permission, re-launch MainActivity
            Intent i = new Intent(MainActivity.this, MainActivity.class);
            Log.d(TAG, "run: 4");
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
            startActivity(i);
            return;
        }
        handler.postDelayed(this, 200);
    }
};

Ensuite, lorsque vous déclenchez l'intention d'accéder à la page des paramètres Android, assurez-vous simplement de démarrer le gestionnaire:

handler.postDelayed(checkSettingOn, 1000);

J'espère que cela aide quelqu'un d'autre avec un problème similaire.

1
Geordie Wicks 30 nov. 2017 à 22:44

Vous devez confirmer que vous n'ouvrez que les paramètres de votre application dont vous avez besoin. N'ouvrez pas l'application des paramètres principaux. Ouvrez uniquement les paramètres de votre application que vous souhaitez. Ainsi, chaque fois que vous appuierez, vous reviendrez à votre application.

Uri uri = Uri.fromParts("package", getPackageName(), null);
Intent intent = new Intent();                            
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(uri);
startActivity(intent);
1
Alexey Denysenko 30 nov. 2017 à 11:43

Vous pouvez faire une chose ici. vous devez confirmer que vous n'ouvrez que le composant des paramètres dont vous avez besoin ... N'ouvrez pas l'application des paramètres principaux. Ouvrez un seul composant dans l'application de paramètres que vous souhaitez. Ainsi, chaque fois que vous appuierez, vous reviendrez à votre application.

Par exemple, si je veux ouvrir les paramètres Bluetooth dans l'application Paramètres, je n'ouvrirai pas l'application Paramètres principale à la place, je n'ouvrirai que le composant Bluetooth des paramètres. De cette façon, lorsque j'appuie, je reviendrai à ma propre application car je n'ai pas ouvert l'application de configuration principale, donc je n'ai pas besoin de naviguer dedans.

ComponentName cn = new ComponentName("com.android.settings", 
                   "com.android.settings.bluetooth.BluetoothSettings");
1
MezzDroid 26 nov. 2017 à 02:17

Après avoir démarré l'activité Paramètres, vous pouvez exécuter une tâche périodique, qui est appelée toutes les 500 ms, par exemple, et vérifie si l'autorisation est accordée.
Marquez votre activité de configuration avec l'indicateur singleTask / singleInstance et démarrez-la, si l'autorisation est accordée. L'instance existante d'activité sera déplacée vers le haut.

J'ai fait cela pour l'autorisation d'accès aux notifications.

2
Ufkoku 30 nov. 2017 à 12:10
47445695