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.
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);
}
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);
}
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."));
}
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
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"))
);
}
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
@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
}