在我的 Android 应用程序中,我使用的是 ActivityRecognition API,它运行良好。不幸的是,AR 需要一些时间来获得第一个修复,我想它会等待一些重要的运动才能获得第一个修复或很长时间才能确定活动是否“静止”,无论我将 1000 ms 设置为detectionIntervalMillis。听起来不错,但并非总是如此 - 有时即使手机仍然是 AR 更新活动,仅在显着运动之后才检测到仍然没有。
ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates(mGoogleApiClient, 1000, mPendingIntent);
当然,我可以简单地同意默认设置为“仍然”,但我不想完全依赖 AR API,也不想丢失一些位置修复(如果某些设备不支持,AR API 将无法在某些设备上正常工作)已更新 Google Play 服务),因此我设置了一个默认值,例如“no_activity_detected”。
换句话说,我只想在 AR API 检测到它的情况下将我的活动更改为“静止”。
我的代码与developers.google上的代码和stackoverflow 上的示例几乎相同,所以这应该不是问题。
MainActivity.java
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(ActivityRecognition.API)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mGoogleApiClient.connect();
@Override
public void onConnected(Bundle bundle) {
MyLog.d(TAG, "on Connect Google API");
Intent intent = new Intent(this, ActivityRecognitionIntentService.class); // my custom ARS class
mPendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates(mGoogleApiClient, 1000, mPendingIntent);
}
ActivityRecognitionIntentService.java:
@Override
protected void onHandleIntent(Intent intent) {
/// Getting probable activity and sending a Broadcast with the recognized activity
}
作为解决方案,我看到了下一个选项:
1)编写另一个静止识别服务,该服务在 AR API 的第一次修复和默认的“no_activity_detected”被更改之前一直有效。
2)正如我在 requestActivityUpdates 中所写,不知何故强制 AR API 在 1000 毫秒后给我一个更新,甚至是不自信的。它将确保 AR API 工作并且我可以依赖它。
有没有更好的方法来解决我的问题?