web-dev-qa-db-fra.com

Comment activer le démarrage automatique pour mon application dans xiaomi par programme

J'ai un service dans mon application qui doit fonctionner tout le temps en arrière-plan. Sur tous les appareils, tout fonctionne sauf Xiaomi. J'en ai lu quelques-uns où il faut activer le démarrage automatique dans les paramètres pour que l'application continue à fonctionner.

Alors s'il vous plaît dites-moi comment activer le démarrage automatique de manière grammaticale car l'utilisateur ne le fera jamais.

Toute aide serait appréciée.

19
Shivam Nagpal

Vous ne pouvez pas activer le démarrage automatique directement, mais vous pouvez rediriger l'utilisateur vers l'écran de configuration du démarrage automatique et lui demander de l'activer pour votre application. Utilisez la solution ci-dessous pour les téléphones xiaomi, oppo et vivo. L'écran de démarrage automatique sera lancé s'il existe.

    try {
        Intent intent = new Intent();
        String manufacturer = Android.os.Build.MANUFACTURER;
        if ("xiaomi".equalsIgnoreCase(manufacturer)) {
            intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity"));
        } else if ("oppo".equalsIgnoreCase(manufacturer)) {
            intent.setComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.permission.startup.StartupAppListActivity"));
        } else if ("vivo".equalsIgnoreCase(manufacturer)) {
            intent.setComponent(new ComponentName("com.vivo.permissionmanager", "com.vivo.permissionmanager.activity.BgStartUpManagerActivity"));
        }

        List<ResolveInfo> list = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
        if  (list.size() > 0) {
            context.startActivity(intent);
        } 
    } catch (Exception e) {
        Crashlytics.logException(e);
    }
17
rajkumar

Essayez ceci ... ça marche pour moi. Cela ouvrira l'écran pour activer le démarrage automatique. Mais si vous essayez de désactiver à partir de là, l'application sera fermée. Je suis en train de trouver une solution pour cela. Jusque-là, vous pouvez utiliser ceci comme solution.

String manufacturer = "xiaomi";
        if(manufacturer.equalsIgnoreCase(Android.os.Build.MANUFACTURER)) {
            //this will open auto start screen where user can enable permission for your app
            Intent intent = new Intent();
            intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity"));
            startActivity(intent);
        }
7
Mohit Mathur

Vous pouvez essayer ceci:

if ("xiaomi".equalsIgnoreCase(str)) 
{
 intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity"));
                    } 
else if ("oppo".equalsIgnoreCase(str)) 
{
 intent.setComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.permission.startup.StartupAppListActivity"));
                    } 
else if ("vivo".equalsIgnoreCase(str)) 
{
  intent.setComponent(new ComponentName("com.iqoo.secure", "com.iqoo.secure.MainGuideActivity."));
 }
1
sreejith

vous pouvez le faire en suivant:

      if (manufactXiaomi.equalsIgnoreCase(Android.os.Build.MANUFACTURER)) {
        if (!session.getVisibilityOfAutoStartDialog()) {Intent intent = new Intent();
            intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity"));
            startActivity(intent);}}

si vous souhaitez continuer à exécuter votre service, vous devez modifier certains paramètres de votre appareil Cochez cette case

le code ci-dessus peut-il fonctionner pour vous

0
Shashwat Gupta
import Android.app.AlertDialog;
import Android.content.Context;
import Android.content.DialogInterface;
import Android.content.Intent;
import Android.content.SharedPreferences;
import Android.content.pm.PackageManager;
import Android.content.pm.ResolveInfo;
import Android.os.Build;
import Android.support.v7.widget.AppCompatCheckBox;
import Android.widget.CompoundButton;
import Java.util.List;

public class Utils {

public static void startPowerSaverIntent(Context context) {
    SharedPreferences settings = context.getSharedPreferences("ProtectedApps", Context.MODE_PRIVATE);
    boolean skipMessage = settings.getBoolean("skipProtectedAppCheck", false);
    if (!skipMessage) {
        final SharedPreferences.Editor editor = settings.edit();
        boolean foundCorrectIntent = false;
        for (Intent intent : Constants.POWERMANAGER_INTENTS) {
            if (isCallable(context, intent)) {
                foundCorrectIntent = true;
                final AppCompatCheckBox dontShowAgain = new AppCompatCheckBox(context);
                dontShowAgain.setText("Do not show again");
                dontShowAgain.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                        editor.putBoolean("skipProtectedAppCheck", isChecked);
                        editor.apply();
                    }
                });

                new AlertDialog.Builder(context)
                        .setTitle(Build.MANUFACTURER + " Protected Apps")
                        .setMessage(String.format("%s requires to be enabled in 'Protected Apps' to function properly.%n", context.getString(R.string.app_name)))
                        .setView(dontShowAgain)
                        .setPositiveButton("Go to settings", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                context.startActivity(intent);
                            }
                        })
                        .setNegativeButton(Android.R.string.cancel, null)
                        .show();
                break;
            }
        }
        if (!foundCorrectIntent) {
            editor.putBoolean("skipProtectedAppCheck", true);
            editor.apply();
        }
    }
}

private static boolean isCallable(Context context, Intent intent) {
    List<ResolveInfo> list = context.getPackageManager().queryIntentActivities(intent,
            PackageManager.MATCH_DEFAULT_ONLY);
    return list.size() > 0;
}
}
}

import Android.content.ComponentName;
import Android.content.Intent;
import Java.util.Arrays;
import Java.util.List;

public class Constants {

public static List<Intent> POWERMANAGER_INTENTS = Arrays.asList(
        new Intent().setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity")),
        new Intent().setComponent(new ComponentName("com.letv.Android.letvsafe", "com.letv.Android.letvsafe.AutobootManageActivity")),
        new Intent().setComponent(new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.optimize.process.ProtectActivity")),
        new Intent().setComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.permission.startup.StartupAppListActivity")),
        new Intent().setComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.startupapp.StartupAppListActivity")),
        new Intent().setComponent(new ComponentName("com.oppo.safe", "com.oppo.safe.permission.startup.StartupAppListActivity")),
        new Intent().setComponent(new ComponentName("com.iqoo.secure", "com.iqoo.secure.ui.phoneoptimize.AddWhiteListActivity")),
        new Intent().setComponent(new ComponentName("com.iqoo.secure", "com.iqoo.secure.ui.phoneoptimize.BgStartUpManager")),
        new Intent().setComponent(new ComponentName("com.vivo.permissionmanager", "com.vivo.permissionmanager.activity.BgStartUpManagerActivity")),
        new Intent().setComponent(new ComponentName("com.asus.mobilemanager", "com.asus.mobilemanager.entry.FunctionActivity")).setData(Android.net.Uri.parse("mobilemanager://function/entry/AutoStart"))
);
}

Réponse de référence

0
Jaffar Raza

Je suis tombé sur cette bibliothèque . Autostarter . C'est une bibliothèque de démarrage automatique pour différents fabricants de périphériques

La dernière fois que je l'ai utilisé, il supportait les appareils Xiaomi et Letv. Je ne peux pas vraiment vous donner des exemples de code, mais j'espère que cela aidera quelqu'un qui tombe par hasard sur cette

0
glenn ferns

@rajkumar a raison, mais vous devez faire attention avec Xiaomi sous Android pur, MI A1, MI A2 et MI A3 à venir, vous devriez donc ajouter quelque chose comme:

if (Build.MANUFACTURER.toLowerCase().contains("xiaomi") 
&&
!Build.MODEL.toLowerCase().contains("mi a")){
 //intent
 }
0
javisilox