【问题标题】:Activity Recognition API does not work continuously活动识别 API 无法连续工作
【发布时间】:2015-04-30 18:34:56
【问题描述】:

我正在 2 个应用程序中测试 Activity Recognition API:Google 示例代码和此代码在我的应用程序中的实现。

问题是两个应用程序都可以正常识别活动,但几个小时后,意图服务停止,我没有从他们两个那里得到任何活动识别。

知道为什么意图服务会停止,即使我已经使用意图服务测试了地理围栏 api 并且它可以永远工作而不会停止?

【问题讨论】:

  • 您使用什么作为意图目标?意向服务?还有什么?
  • 我在 SO 上的某个地方看到,如果应用程序被销毁,IntentService 最终会消失。尝试将意图用于普通服务,或 WakefulBroadcast 然后使用 IntentService。
  • 感谢您的建议!我已经尝试使用意图服务进行活动识别,看起来它正在工作,问题是当您更新/重新安装应用程序时..有时您需要重新启动设备以使其再次工作。我想过将意图服务转换为服务

标签: android android-intent activity-recognition


【解决方案1】:

您的 IntentService 可能会“停止”,我会说“入睡”,因为:

为了节省电池电量,活动报告可能会在设备处于关机状态时停止 'STILL' 很长一段时间。一旦设备将恢复 再次移动。这只发生在支持 Sensor.TYPE_SIGNIFICANT_MOTION 硬件。

对于大多数 API >= 20 的设备来说,基本上应该是这种情况。

请查找更多here

不幸的是,您只能请求活动更新,并且无法强制 ActivityRecognitionApi 连续提供当前活动,即使它“静止”了一些神秘的“延长时间”。

在我看来,如果 ActivityRecognitionApi 的这个功能是可配置的,会方便很多。

【讨论】:

  • 感谢您的回答!经过我使用 ActivityRecognitionApi 进行的大量测试后,它看起来并不总是稳定的。有时它会连续工作,一段时间后它会“入睡”。
  • 在我的情况下,即使设备开始移动,它也会停止报告,有时即使设备静止,它也会定期更新。它应该在活动状态更改时重新开始,但不是某个时候。你说得对,如果我们可以配置 API 设置会更容易。
【解决方案2】:

即使在 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);

    }

【讨论】:

    猜你喜欢
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    相关资源
    最近更新 更多