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

如果長時間沒有變化,它將不會發送更新,直到發生變化...