1

我正在开发android本机应用程序。我的要求是获得设备的当前活动,如运行,in_vehicle,静止等等。我使用了ActivityRecognitionAPI并将pendingintent设置为通过IntentService接收活动更改。我给了每个更新的5秒间隔。它未能在一段时间内提供活动变化,并再次开始提供活动。之后,我首选Awareness SnapshotAPI以获取活动状态。它也是同样的结果,没有定期提供活动。这两种API有时都提供,很多时候不提供。我使用GooglePlayServices 10.2.0版本进行开发。任何人都知道这些东西和解决方案的原因是什么,以获得定期的活动更新..Android活动识别问题

在此先感谢。

我想显示我的应用程序用户的活动,如他正在散步,跑步等。这是我的要求。

方法1:使用ActivityRecognition.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); 

     } 
} 

**

//谷歌API客户端我尝试这样的方式来获得活动更新。它开始提供活动信息,但Intent服务有时不被调用,并且再次开始启动该意图。所以我无法显示正确的活动信息。

方式2:使用Awareness.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客户端**我这个尝试另一种方法,使用这个API,我们可以递归调用此方法并经常收到活动信息。但它也有时提供,有时会检测到ActivityResult.getStatus()不成功。如果我试图获取状态码和状态消息,状态码返回15,状态消息将为空。

这两种方式都无法定期更新活动,而且我更多地使用GooglePlayService 10.2.0版本。我已经从Github测试了ActivityRecognition的GoogleSamples。这也是同样的结果。我不知道如何达到我的要求。希望你现在能理解我的需求和我所面对的事情。得到响应后

+0

请更具体地说明您正在尝试做什么以及如何做?那么问题是什么。如果您包含代码,这将非常有用 –

+0

我想显示我的应用用户的活动,如他正在散步,跑步等。这是我的要求。 –

+0

因此,您正在讨论Android中由Google Fit而非Activity类表示的用户活动。对 ? –

回答

0

调用此方法再次:

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

ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates(googleApiClient,o, callbackIntent); 
+0

我也是这样试过的。同样的结果。 –

+0

我设置了getWindow()。addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);在我的活动中。现在我正在定期更新而不会中断或暂停。 –

0

ActivityRecognitionAPI不会定期更新。从我注意到的情况来看,如果活动的置信度发生变化或活动发生变化,那么它会发送更新。即便如此,确保读取的数据不仅仅是某种噪音还需要时间。

我不知道为什么你需要定期更新,但我建议改变逻辑以接受最后一次给定的活动作为当前活动,并且只对这些更改采取行动(即STILL - >IN_VEHICLE)。

0

如果长时间没有变化,它将不会发送更新,直到发生变化...