[英]Android activity recognition issue
我正在开发android原生应用程序。 我的要求是获取设备的当前活动,如running,in_vehicle,still等。 我使用ActivityRecognitionAPI并将pendingintent设置为通过IntentService接收活动更改。 我给每个更新的时间间隔为5秒。 它未能在一定时间内提供活动变化,并再次开始提供活动。 之后我更喜欢Awareness SnapshotAPI来获取活动状态。 它也同样的结果,未能定期提供活动。 这两种API有时提供,有时不提供。 我使用GooglePlayServices 10.2.0版本进行开发。 任何人都告诉这些事情的原因和解决方案,以获得定期的活动更新..
提前致谢。
我正在尝试显示我的应用用户的活动,比如他正在走路,跑步等等。 这是我的要求。
方式1:
//使用ActivityRecognition.API的Google API客户端
Intent intent = new Intent(mContext, RequestActivityService.class);
PendingIntent callbackIntent = PendingIntent.getService(mContext, 111,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates(googleApiClient,5000, callbackIntent);
public class RequestActivityService extends IntentService {
public RequestActivityService() {
super("RequestActivityService");
}
@Override
protected void onHandleIntent(Intent intent) {
if (ActivityRecognitionResult.hasResult(intent)) {
ActivityRecognitionResult result = ActivityRecognitionResult
.extractResult(intent);
DetectedActivity mostProbableActivity = result
.getMostProbableActivity();
int confidence = mostProbableActivity.getConfidence();
int activityType = mostProbableActivity.getType();
String activityName = getNameFromType(activityType);
}
}
**我尝试这种方式来获取活动更新。 它开始提供活动信息,但有时不调用Intent服务,并再次启动触发意图。 所以我无法显示正确的活动信息。
方式2:
//使用Awareness.API的Google API客户端
Awareness.SnapshotApi.getDetectedActivity(googleApiClient).
setResultCallback(new ResultCallback<DetectedActivityResult>() {
@Override
public void onResult(@NonNull DetectedActivityResult detectedActivityResult) {
if (!detectedActivityResult.getStatus().isSuccess()) {
Log.i("Could not get the activity","");
return;
}
ActivityRecognitionResult ar = detectedActivityResult.getActivityRecognitionResult();
DetectedActivity probableActivity = ar.getMostProbableActivity();
String activityType = RequestActivityService.getNameFromType(probableActivity.getType());
int activityConfidence = probableActivity.getConfidence();
}
});
**我尝试了另一种方式,使用这个Api我们可以递归调用此方法并经常获取活动信息。 但它也有时提供并且有时检测到的ActivityResult.getStatus()没有成功。 如果我试图获取状态代码和状态消息,状态代码将返回15并且状态消息将为null。
这两种方式都无法定期更新活动,而且我使用的是GooglePlayService 10.2.0版本。 我已经从Github测试了ActivityScognition的GoogleSamples。 这也是同样的结果。 我不知道如何达到我的要求。 希望你现在能理解我的要求和我所面对的事情。
得到回复后再次调用此方法:
我建议将detectionIntervalMillis设置为0.这将导致尽快获取数据。(注意电池消耗)
ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates(googleApiClient,o, callbackIntent);
Google的ActivityRecognitionAPI不会定期提供更新。 根据我的注意,如果活动的置信度或活动完全改变,那么它将发送更新。 即便如此,确保数据读取不仅仅是某种噪声还需要时间。
我不确定为什么你需要定期更新,但我建议改变逻辑以接受最后给定的活动作为当前活动,并且只对变化采取行动(即, STILL
- > IN_VEHICLE
)。
如果长时间没有变化,它将不会发送更新,直到发生变化...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.