我正在 2 个应用程序中测试 Activity Recognition API:Google 示例代码和此代码在我的应用程序中的实现。
问题是这两个应用程序都能很好地识别活动,但几个小时后,意图服务停止,我没有从他们两个那里得到任何活动识别。
知道为什么即使我已经使用意图服务测试了地理围栏 api 并且它可以永远工作而不会停止,为什么意图服务会停止?
我正在 2 个应用程序中测试 Activity Recognition API:Google 示例代码和此代码在我的应用程序中的实现。
问题是这两个应用程序都能很好地识别活动,但几个小时后,意图服务停止,我没有从他们两个那里得到任何活动识别。
知道为什么即使我已经使用意图服务测试了地理围栏 api 并且它可以永远工作而不会停止,为什么意图服务会停止?
您的 IntentService 可能会“停止”,我会说“入睡”,因为:
为了节省电池电量,当设备长时间处于“静止”状态时,活动报告可能会停止。一旦设备再次移动,它将恢复。这只发生在支持 Sensor.TYPE_SIGNIFICANT_MOTION 硬件的设备上。
基本上,大多数 API >= 20 的设备都应该是这种情况。
请在此处找到更多信息。
不幸的是,您只能请求活动更新,并且无法强制ActivityRecognitionApi连续提供当前活动,即使它在某个神秘的“延长时间”内“静止”。
在我看来,如果 ActivityRecognitionApi 的这个特性是可配置的,那会更方便。
即使在 Manifest 文件中注册广播接收器,您也需要在 Oreo+ 中动态注册,否则将无法正常工作。试试这个。在主要活动中或在服务的 startCommand 中添加此代码。它对我有用。我也在 Android 10 上测试过此代码。完美运行。您无需在清单文件中注册广播接收器。
@Override
protected void onStart() {
super.onStart();
IntentFilter intentFilter=new IntentFilter(Constants.BROADCAST_DETECTED_ACTIVITY);
intentFilter.addCategory(Intent.CATEGORY_DEFAULT);
registerReceiver(broadcastReceiver,intentFilter);
}