Android-如何在小米设备中以编程方式启用自动启动选项?

Rak*_*h L 5 android autostart push-notification

我正在开发一个我要在其中显示Push通知的android应用程序。

小米手机(我正在使用Redmi Note 4)外,它在大多数设备中均显示良好。我发现的问题是,由于Xiomi提供的“ 自动启动”选项,默认情况下该选项将被禁用,并且用户需要手动启用它。

但是我不知道我能看到某些Android Apps在没有任何用户交互的情况下启用此选项,例如:WhatsApp。如果我尝试重新安装WhatsApp并看到“自动启动”选项,则会启用它!

我无法通过说这是Xiomi设备的功能来说服客户,因为他指出了一些运行良好的应用程序,就像我上面提到的示例一样。

这个问题已经有人问过了

以编程方式将我的应用添加到android中的AutoStart应用列表

如何在小米制造商移动设备中以编程方式为我们的应用程序启用自动启动检查

但是我看不到任何答案,因此希望有人能对此给出答案,在此发布。

Roh*_*rma 5

如果小米操作系统希望将其从Playstore下载该应用程序,则该功能会自动启用,因为亚马逊,谷歌IO等应用程序也不允许自动启动,在这种情况下,您必须转到安全权限->自动启动->然后从那里启用自动启动。您无法通过代码使应用程序自动启动,只能显示一个对话框来启用自动启动并将用户带到自动启动活动,但这不是一个好选择,因为您无法检查自动启动是否是否启用。Mi在MIUI8中这样做是为了节省电池。此问题浪费了我2天的XD

您可以参考这篇文章


Har*_*esh 5

小米、OPPO、vivo等设备以编程方式启用自动启动选项

String manufacturer = android.os.Build.MANUFACTURER;
try {
      Intent intent = new Intent();
      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"));
      } else if ("Letv".equalsIgnoreCase(manufacturer)) {
                intent.setComponent(new ComponentName("com.letv.android.letvsafe", "com.letv.android.letvsafe.AutobootManageActivity"));
      } else if ("Honor".equalsIgnoreCase(manufacturer)) {
                intent.setComponent(new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.optimize.process.ProtectActivity"));
      }

      List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
      if (list.size() > 0) {
                startActivity(intent);
      }

} catch (Exception e) {
      e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)