我一直在努力解决这个问题,但迄今为止没有找到解决方案。我看过很多关于如何实现此功能的指南(文档,教程),并且成功地在Android 7上实现了它。我所做的是,在用户活动改变时成功接收到后台运行服务的通知。我的应用程序工作得非常完美。问题出在Android 8和Google电池管理上。我的服务总是被杀掉。因此...我已经尝试过以下方法来解决这个问题:
Explain the user how to disable battery optimization for my app so it will not kill my service. The problem is its too comlicated for cummon user.
Add
uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"
然后使用代码进行检查:
Intent intent = new Intent();
String packageName = context.getPackageName();
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
if (pm.isIgnoringBatteryOptimizations(packageName)){
intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
}
else {
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + packageName));
}
}
context.startActivity(intent);
我知道我的应用可能会被Play商店禁止,这是一个大问题。
- 使用前台服务和持久通知。问题是用户经常看到这些持续的而且有时不相关的通知,这很烦人。
那么,我如何在Android 8中使用 ActivityRecognitionClient ,即使我的应用程序在后台运行也始终接收活动更改通知?也许可以直接连接Google服务来实现这一点?
DetectedActivityFence
会有用吗?请参见 https://developers.google.com/awareness/android-api/fence-api-overview - stkentstartForegroundService()
。即使您的应用程序在后台运行,相应的用户界面通知也只会短暂可见。 - stkent