当前位置: 首页 > 知识库问答 >
问题:

Android活动识别问题

太叔何平
2023-03-14

我正在开发android原生应用程序。我的要求是获取设备的当前活动,如运行,in_vehicle,静止等等。我使用Activity识别API并设置了通过IntentService接收活动更改的挂起意图。我给每个更新5秒的间隔。它未能在某段时间内提供活动更改并再次开始提供活动。之后我更喜欢Awareness SnapshotAPI来获取活动状态。它也是同样的结果,未能定期提供活动。两个API有时提供,很多时候不提供。我使用GooglePlayServices 10.2.0版本进行我的开发。任何人告诉这些事情的原因和解决方案是什么,以获得定期的活动更新...

提前谢谢。

我试图显示我的应用程序用户的活动,比如他在走路、跑步等等。这是我的要求。

方式一:

//使用Activity认可的Google API客户端。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服务,然后再次启动Intent。因此,我无法显示正确的活动信息。

方式2:

//使用Awareness的Google API客户端。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,状态消息将为空。

这两种方式都无法定期更新活动,而且我使用了GooglePlayService 10.2.0版本。我已经测试了来自Github的Activity认可的GoogleSamples。这也是同样的结果。我不知道该怎么做才能达到我的要求。希望现在你能理解我的要求和我面临的事情。

共有3个答案

诸葛柏
2023-03-14

如果长时间没有更改,则在发生更改之前不会发送更新。。。

华福
2023-03-14

得到响应后再次调用此方法:

我建议将detectionIntervalMillis设置为0。这将导致尽快获取数据。(注意电池消耗)

ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates(googleApiClient,o, callbackIntent);
和季
2023-03-14

谷歌的ActivityRecognitionAPI不定期提供更新。从我所注意到的情况来看,如果活动的置信度发生了变化,或者活动完全发生了变化,那么它将发送一个更新。即使这样,也需要时间来确保读取的数据不仅仅是某种噪音。

我不确定您为什么需要定期更新,但我建议更改逻辑以接受最后一个给定的活动作为当前活动,并且只对更改进行操作(即,仍然-

 类似资料:
  • 在最近的Google Play服务更新中,有人对活动识别API有问题吗? 我已经在一个应用程序中实现了它。在5.0更新之前,它工作得非常好。现在,当用户走路或坐着不动时,它会在车内返回:/ 并且根本不返回、或。 我应该知道的活动识别API是否有任何更改? 如果你需要更多的细节,请告诉我。

  • 我正在制作一个应用程序,使用ActivityRecognition API跟踪用户在后台的活动,如果用户在指定的时间段(例如1小时)内保持在同一位置,则系统会推送通知,告诉用户散步。我已经实现了活动识别,但仅适用于打开应用程序的情况。显然,Google API客户端需要保持连接才能发送活动更新。我的问题是-对于后台活动跟踪,什么是更好的解决方案: 1)在主活动(或单独活动)中实现警报管理器,该活动

  • 我将使用google play services活动识别api编写一个应用程序。android开发者网站上的培训是直接进行的,但在过去的几个小时里,我编写了一个简单的应用程序,但没有得到任何结果。更新:实际上,我将在5秒钟的时间间隔内以toast消息的形式显示用户的当前活动(如ActivityRecognitionService-Intent服务中的OnIntentHandler方法所示)。我认为

  • 我试图在项目中使用活动识别来检测用户何时“在车内”。(驾驶)问题是几乎不可能使用它,因为大多数可能的活动经常报告“车内”,即使我已经在办公桌前坐了很长时间,或者只是在家里走来走去。很高兴知道API是如何得出这一结论的。 我认为这个功能有很大的潜力,但现在有些东西显然不起作用。 这是一份每30秒进行一次的最有可能的活动日志,以显示我的意思。坐在办公桌前,4分钟后,我把电话转了几次,结果是“最有可能的

  • 我正在处理活动识别API,试图使其在后台运行。因此,我创建了一个连接到Play Services的服务,并且一直处于活动状态。当服务被销毁并重新创建时,我要干杯了。问题是,一段时间后,即使服务正在运行,它也会停止检测活动。 下面是该服务的一些代码。 我还覆盖了onConnectionSuspend 这段代码正常工作了一段时间,然后突然停止了。有人知道为什么吗? 谢谢。

  • 自从在macOS上升级到Android Studio4.0后,我一直有这个问题。当我试图从Android Studio启动我的应用程序时,我会得到以下错误: 我的项目有一点独特之处在于,默认活动是在我的项目使用的另一个库的清单中定义的,而不是项目本身。在升级之前,这一切都很好,但现在不适合我。当我打开包含依赖项的项目时,它可以正常构建和运行。我已经尝试了以下步骤: 清理项目,重建 使缓存无效并重新