繁体   English   中英

Android活动识别问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM