Compruebe la siguiente solución para habilitar el floating window
y autostart permission
por OPPO
y VIVO
dispositivos.
No hay forma de saber si la opción de inicio automático está habilitada o no. Puede comprobar manualmente en Security permissions => Autostart => Enable Autostart
.
En dispositivos Oppo:
private void initOPPO()
try
Intent i = new Intent(Intent.ACTION_MAIN);
i.setComponent(new ComponentName("com.oppo.safe", "com.oppo.safe.permission.floatwindow.FloatWindowListActivity"));
startActivity(i);
catch (Exception e)
e.printStackTrace();
try
Intent intent = new Intent("action.coloros.safecenter.FloatWindowListActivity");
intent.setComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.permission.floatwindow.FloatWindowListActivity"));
startActivity(intent);
catch (Exception ee)
ee.printStackTrace();
try
Intent i = new Intent("com.coloros.safecenter");
i.setComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.sysfloatwindow.FloatWindowListActivity"));
startActivity(i);
catch (Exception e1)
e1.printStackTrace();
Permiso de inicio automático para VIVO
private static void autoLaunchVivo(Context context)
try
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.iqoo.secure",
"com.iqoo.secure.ui.phoneoptimize.AddWhiteListActivity"));
context.startActivity(intent);
catch (Exception e)
try
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.vivo.permissionmanager",
"com.vivo.permissionmanager.activity.BgStartUpManagerActivity"));
context.startActivity(intent);
catch (Exception ex)
try
Intent intent = new Intent();
intent.setClassName("com.iqoo.secure",
"com.iqoo.secure.ui.phoneoptimize.BgStartUpManager");
context.startActivity(intent);
catch (Exception exx)
ex.printStackTrace();
Inicio automático para OPPO
if (Build.MANUFACTURER.equalsIgnoreCase("oppo"))
try
Intent intent = new Intent();
intent.setClassName("com.coloros.safecenter",
"com.coloros.safecenter.permission.startup.StartupAppListActivity");
startActivity(intent);
catch (Exception e)
try
Intent intent = new Intent();
intent.setClassName("com.oppo.safe",
"com.oppo.safe.permission.startup.StartupAppListActivity");
startActivity(intent);
catch (Exception ex)
try
Intent intent = new Intent();
intent.setClassName("com.coloros.safecenter",
"com.coloros.safecenter.startupapp.StartupAppListActivity");
startActivity(intent);
catch (Exception exx)
La función de inicio automático se habilitará automáticamente cuando descargue la aplicación de la tienda de juegos si el sistema operativo xiaomi lo quiere, ya que las aplicaciones como Amazon, Google IO, etc., tampoco pueden iniciarse automáticamente. En este caso, debe ir a Permisos de seguridad -> Inicio automático -> luego habilite el inicio automático desde allí.No puede hacer que la aplicación se inicie automáticamente por código, todo lo que puede hacer es mostrar un cuadro de diálogo para habilitar el inicio automático y llevar al usuario a la actividad de inicio automático, pero esta no es una buena opción ya que no puede verificar si el inicio automático es habilitado o no.
Esto lo hace Mi en MIUI8 para ahorrar batería.
Referencia
Puede consultar el artículo MIUI8
Usa esta clase de ayuda
public class AutoStartHelper
/***
* Xiaomi
*/
private final String BRAND_XIAOMI = "xiaomi";
private String PACKAGE_XIAOMI_MAIN = "com.miui.securitycenter";
private String PACKAGE_XIAOMI_COMPONENT = "com.miui.permcenter.autostart.AutoStartManagementActivity";
/***
* Letv
*/
private final String BRAND_LETV = "letv";
private String PACKAGE_LETV_MAIN = "com.letv.android.letvsafe";
private String PACKAGE_LETV_COMPONENT = "com.letv.android.letvsafe.AutobootManageActivity";
/***
* ASUS ROG
*/
private final String BRAND_ASUS = "asus";
private String PACKAGE_ASUS_MAIN = "com.asus.mobilemanager";
private String PACKAGE_ASUS_COMPONENT = "com.asus.mobilemanager.powersaver.PowerSaverSettings";
/***
* Honor
*/
private final String BRAND_HONOR = "honor";
private String PACKAGE_HONOR_MAIN = "com.huawei.systemmanager";
private String PACKAGE_HONOR_COMPONENT = "com.huawei.systemmanager.optimize.process.ProtectActivity";
/**
* Oppo
*/
private final String BRAND_OPPO = "oppo";
private String PACKAGE_OPPO_MAIN = "com.coloros.safecenter";
private String PACKAGE_OPPO_FALLBACK = "com.oppo.safe";
private String PACKAGE_OPPO_COMPONENT = "com.coloros.safecenter.permission.startup.StartupAppListActivity";
private String PACKAGE_OPPO_COMPONENT_FALLBACK = "com.oppo.safe.permission.startup.StartupAppListActivity";
private String PACKAGE_OPPO_COMPONENT_FALLBACK_A = "com.coloros.safecenter.startupapp.StartupAppListActivity";
/**
* Vivo
*/
private final String BRAND_VIVO = "vivo";
private String PACKAGE_VIVO_MAIN = "com.iqoo.secure";
private String PACKAGE_VIVO_FALLBACK = "com.vivo.perm;issionmanager";
private String PACKAGE_VIVO_COMPONENT = "com.iqoo.secure.ui.phoneoptimize.AddWhiteListActivity";
private String PACKAGE_VIVO_COMPONENT_FALLBACK = "com.vivo.permissionmanager.activity.BgStartUpManagerActivity";
private String PACKAGE_VIVO_COMPONENT_FALLBACK_A = "com.iqoo.secure.ui.phoneoptimize.BgStartUpManager";
/**
* Nokia
*/
private final String BRAND_NOKIA = "nokia";
private String PACKAGE_NOKIA_MAIN = "com.evenwell.powersaving.g3";
private String PACKAGE_NOKIA_COMPONENT = "com.evenwell.powersaving.g3.exception.PowerSaverExceptionActivity";
private AutoStartHelper()
public static AutoStartHelper getInstance()
return new AutoStartHelper();
public void getAutoStartPermission(Context context)
String build_info = Build.BRAND.toLowerCase();
switch (build_info)
case BRAND_ASUS:
autoStartAsus(context);
break;
case BRAND_XIAOMI:
autoStartXiaomi(context);
break;
case BRAND_LETV:
autoStartLetv(context);
break;
case BRAND_HONOR:
autoStartHonor(context);
break;
case BRAND_OPPO:
autoStartOppo(context);
break;
case BRAND_VIVO:
autoStartVivo(context);
break;
case BRAND_NOKIA:
autoStartNokia(context);
break;
private void autoStartAsus(final Context context)
if (isPackageExists(context, PACKAGE_ASUS_MAIN))
showAlert(context, (dialog, which) ->
try
PrefUtil.writeBoolean(context, PrefUtil.PREF_KEY_APP_AUTO_START, true);
startIntent(context, PACKAGE_ASUS_MAIN, PACKAGE_ASUS_COMPONENT);
catch (Exception e)
e.printStackTrace();
dialog.dismiss();
);
private void showAlert(Context context, DialogInterface.OnClickListener onClickListener)
new AlertDialog.Builder(context).setTitle("Allow AutoStart")
.setMessage("Please enable auto start in settings.")
.setPositiveButton("Allow", onClickListener).show().setCancelable(false);
private void autoStartXiaomi(final Context context)
if (isPackageExists(context, PACKAGE_XIAOMI_MAIN))
showAlert(context, (dialog, which) ->
try
PrefUtil.writeBoolean(context, PrefUtil.PREF_KEY_APP_AUTO_START, true);
startIntent(context, PACKAGE_XIAOMI_MAIN, PACKAGE_XIAOMI_COMPONENT);
catch (Exception e)
e.printStackTrace();
);
private void autoStartLetv(final Context context)
if (isPackageExists(context, PACKAGE_LETV_MAIN))
showAlert(context, new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which)
try
PrefUtil.writeBoolean(context, PrefUtil.PREF_KEY_APP_AUTO_START, true);
startIntent(context, PACKAGE_LETV_MAIN, PACKAGE_LETV_COMPONENT);
catch (Exception e)
e.printStackTrace();
);
private void autoStartHonor(final Context context)
if (isPackageExists(context, PACKAGE_HONOR_MAIN))
showAlert(context, new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which)
try
PrefUtil.writeBoolean(context, PrefUtil.PREF_KEY_APP_AUTO_START, true);
startIntent(context, PACKAGE_HONOR_MAIN, PACKAGE_HONOR_COMPONENT);
catch (Exception e)
e.printStackTrace();
);
private void autoStartOppo(final Context context) isPackageExists(context, PACKAGE_OPPO_FALLBACK))
showAlert(context, new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which)
try
PrefUtil.writeBoolean(context, PrefUtil.PREF_KEY_APP_AUTO_START, true);
startIntent(context, PACKAGE_OPPO_MAIN, PACKAGE_OPPO_COMPONENT);
catch (Exception e)
e.printStackTrace();
try
PrefUtil.writeBoolean(context, PrefUtil.PREF_KEY_APP_AUTO_START, true);
startIntent(context, PACKAGE_OPPO_FALLBACK, PACKAGE_OPPO_COMPONENT_FALLBACK);
catch (Exception ex)
ex.printStackTrace();
try
PrefUtil.writeBoolean(context, PrefUtil.PREF_KEY_APP_AUTO_START, true);
startIntent(context, PACKAGE_OPPO_MAIN, PACKAGE_OPPO_COMPONENT_FALLBACK_A);
catch (Exception exx)
exx.printStackTrace();
);
private void autoStartVivo(final Context context)
private void autoStartNokia(final Context context)
if (isPackageExists(context, PACKAGE_NOKIA_MAIN))
showAlert(context, new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which)
try
PrefUtil.writeBoolean(context, PrefUtil.PREF_KEY_APP_AUTO_START, true);
startIntent(context, PACKAGE_NOKIA_MAIN, PACKAGE_NOKIA_COMPONENT);
catch (Exception e)
e.printStackTrace();
);
private void startIntent(Context context, String packageName, String componentName) throws Exception
try
Intent intent = new Intent();
intent.setComponent(new ComponentName(packageName, componentName));
context.startActivity(intent);
catch (Exception var5)
var5.printStackTrace();
throw var5;
private Boolean isPackageExists(Context context, String targetPackage)
List packages;
PackageManager pm = context.getPackageManager();
packages = pm.getInstalledApplications(0);
for (ApplicationInfo packageInfo :
packages)
if (packageInfo.packageName.equals(targetPackage))
return true;
return false;
en tu actividad
AutoStartHelper.getInstance().getAutoStartPermission(this);
no hay forma de rastrear si hemos habilitado el inicio automático o no.
Tienes la posibilidad recomendar este enunciado si te ayudó.