在中国版ROM中运行前台服务

3
我创建了一个前台服务来不断扫描我周围的BLE设备。出于某种原因,它似乎在我的原生安卓设备Google Pixel和三星S9+上无缝运行。
但最近我在中国版ROM(Oneplus 6T,小米Poco F1)上测试应用程序时,前台服务似乎在几分钟后被杀死。我已经使用WorkManager重新启动服务,但应用程序没有重新启动,而是收到了错误报告。
此外,在Android 8.0以下的中国版ROM设备(小米红米3s prime)上,简单服务将无法工作,我也需要在那里使用前台服务。有没有解决这个问题的解决方案?

请考虑使用唤醒锁。 - undefined
3
请添加您尝试过的代码内容。 - undefined
@GeekWithGlasses已经完成了那个任务。 - undefined
请参考以下链接:https://dev59.com/Ua7la4cB1Zd3GeqPkN2F#52931759 - undefined
@ofer2980 需要为每个ROM定制解决方案。同时,使用ACTION_BATTERY_SAVER_SETTINGS意图的对话框来开启电池优化功能。然而,这并不是绝对可靠的,为了达到这一点,您需要在每个构建中关闭深度电池优化设置。 - undefined
显示剩余2条评论
2个回答

1

@DivyeShah 很抱歉,我不能这样做。我没有拥有任何那些手机,并且白名单程序也有很大的不同。但是在那个链接中,你可以找到这个链接https://bitbucket.org/copluk/acr/issues/607。里面有一些有用的演示图片。 - undefined
@DeweyReed 你所说的白名单是指关闭电池优化吗? - undefined
@DeweyReed 非常感谢你的帮助!不过,中文版的ROM真是个噩梦。我不知道该如何说服用户关闭所有这些电池优化功能! - undefined
@DeweyReed 我刚刚注意到在我的OnePlus上安装ACR后,它并没有要求电池优化权限,但它仍然在运行,这是怎么可能的? - undefined
@DivyeShah 谢谢你的解释。我会尽力去做的。 - undefined
显示剩余7条评论

0
一个简单的方法是在您的应用程序启动时要求用户将您的应用程序放置在非优化的应用程序中,通过打开电池优化设置。 使用以下代码打开设置:
    Intent batterySaverIntent=new Intent(Settings.ACTION_BATTERY_SAVER_SETTINGS);
startActivity(batterySaverIntent);

或者你可以试试这个:

  @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        startForegroundService(new Intent(this, ServiceClass.class));
    }

我尝试过了,但它停留了一个小时,现在我正在等待使用WorkManager重新启动它,有什么见解吗? - undefined

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