无法在小米设备上从后台唤醒应用,直到手动启用"自启动"。

12
在小米的MI设备上,有一个功能可以在他们的安全应用中关闭/打开“自启动”(在安全应用程序->权限->自启动中)。

enter image description here

这意味着在应用程序未运行时,没有广播接收器会接收到任何内容。因此,BOOT_COMPLETED、USER_PRESENT、CONNECTIVITY_CHANGE等不起作用(它们在应用程序前台运行一段时间后停止工作)。在用户从小米版本的“最近使用的应用程序”中滑动应用程序后,它们也会停止工作。 即使 GCM 也无法唤醒它 对于消息应用来说,这是一个致命问题。
默认情况下,WhatsApp、Messenger、Flipkart 等应用程序已启用(即使这些应用程序未预安装)。
大多数其他应用默认禁用此功能。例如,Slack 默认禁用。
是否有一种方法可以默认加入此白名单?

不知道如何将应用程序加入白名单。如果用户使用小米手机,您可以要求他们在启动时启用自动启动。 - Sangharsh
我也遇到了同样的问题。已经有解决方案了吗? - user3162662
@gautam 这个有更新了吗? - Jickson
有人找到解决方案了吗? - RaRa
1个回答

0

您实际上可以为您的应用程序禁用电池优化。这将关闭应用程序的所有优化,因此它不会被杀死。

boolean isIgnoringBatteryOptimizations = pm.isIgnoringBatteryOptimizations(getPackageName());
if(!isIgnoringBatteryOptimizations){
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
    intent.setData(Uri.parse("package:" + getPackageName()));
    startActivityForResult(intent, MY_IGNORE_OPTIMIZATION_REQUEST);
}

现在检查一下你的应用程序是否已经禁用了优化。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == MY_IGNORE_OPTIMIZATION_REQUEST) {
        PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
        boolean isIgnoringBatteryOptimizations = pm.isIgnoringBatteryOptimizations(getPackageName());
        if(isIgnoringBatteryOptimizations){
            // Ignoring battery optimization
        }else{
           // Not ignoring battery optimization
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接