组件侦听器



我有华为手机,当我使用华为前台服务时,它只是停止服务。然而,我找到了这个解决方案(https://stackoverflow.com/a/51726040/14446860)。由于我的应用程序在华为手机的保护应用程序中未启用,因此服务停止。

我的问题是,当我要求用户启用受保护的应用程序时,我如何广播此设置?我每次都要问用户,即使他启用了它吗?

public class Constants {
//updated the POWERMANAGER_INTENTS 26/06/2019
static final 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.huawei.systemmanager", Build.VERSION.SDK_INT >= Build.VERSION_CODES.P? "com.huawei.systemmanager.startupmgr.ui.StartupNormalAppListActivity": "com.huawei.systemmanager.appcontrol.activity.StartupAppControlActivity")),
new Intent().setComponent(new ComponentName("com.coloros.oppoguardelf", "com.coloros.powermanager.fuelgaue.PowerUsageModelActivity")),
new Intent().setComponent(new ComponentName("com.coloros.oppoguardelf", "com.coloros.powermanager.fuelgaue.PowerSaverModeActivity")),
new Intent().setComponent(new ComponentName("com.coloros.oppoguardelf", "com.coloros.powermanager.fuelgaue.PowerConsumptionActivity")),
new Intent().setComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.permission.startup.StartupAppListActivity")),
Build.VERSION.SDK_INT >= Build.VERSION_CODES.N ? new Intent().setComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.startupapp.StartupAppListActivity")).setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).setData(Uri.parse("package:"+ MyApplication.getContext().getPackageName())) : null,
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")),
new Intent().setComponent(new ComponentName("com.asus.mobilemanager", "com.asus.mobilemanager.autostart.AutoStartActivity")),
new Intent().setComponent(new ComponentName("com.letv.android.letvsafe", "com.letv.android.letvsafe.AutobootManageActivity"))
.setData(android.net.Uri.parse("mobilemanager://function/entry/AutoStart")),
new Intent().setComponent(new ComponentName("com.meizu.safe", "com.meizu.safe.security.SHOW_APPSEC")).addCategory(Intent.CATEGORY_DEFAULT).putExtra("packageName", BuildConfig.APPLICATION_ID)
);
}

谢谢。

UPDATE

  1. EMUI支持从app UI跳转到app启动管理页面,但不支持提供一个界面来检查应用程序是否在后台保持活跃。
  2. 因此,建议显示提示而不是跳转到系统。
  • 当应用程序第一次启动时,提示提示用户在后台手动保持应用程序存活
  • 如果后台保持存活未启用,应用程序不能在后台运行很长时间。建议您使用faq来通知用户应用中的问题。

这种体验可能不是最好的。但是为了保证手机的功耗和性能,华为没有提供相关接口。


这是为了防止恶意操作,如后台运行和相关启动,这可能会导致您的手机内存和功耗急剧增加。默认情况下,EMUI不允许相关应用程序在后台运行或与手机关联。但是,它支持在关联的手机中手动保持激活状态,以便应用程序可以在后台开机或自动启动,并且在手机重新启动后设置生效。

如果由于使用场景需要允许应用程序一直在后台运行,我们建议在安装后第一次启动应用程序时,弹出提示提示用户进行手动keep-alive操作

你可以这样做:电话管理器→应用程序启动管理→关闭自动管理→选择允许自启动/允许后台活动

弹出提示提示应用程序需要相应地进行少量的开发。

最新更新