2016-02-20 607 views
0

任何人都知道伟大的文档或Google的解释ActivityRecognitionAPI?除了这一个:https://developers.google.com/android/reference/com/google/android/gms/location/ActivityRecognitionApiActivityRecognitionAPI文档/说明

这个文档是如此薄弱,我想知道更多关于这个API,以及它是如何工作的! 如果你有这个API的工作原理,我会非常高兴! =)

谢谢!

+0

所有的谷歌游戏服务API,包括动作识别API,是闭源的,所以我怀疑你就可以发现很多在“如何运作”的方式。 – ianhanniballake

+0

嗯......好的!谢谢! –

回答

2

至于它是如何工作的,它是一个封闭的谷歌API,因此你不能得到确切的答案,但大多数人认为这主要依赖加速度传感器,尽管有人也说它使用陀螺仪和其他一些传感器。

至于如何使用这一点,因为这里是一个示例代码:

1.添加播放业务的依赖

在你的build.gradle(模块:APP),添加:

compile 'com.google.android.gms:play-services:10.0.1'

2.添加权限

在您的清单,添加以下权限:

<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />

3.连接API中的onCreate MainActivity

(请确保您已经声明为public GoogleApiClient mApiClient作为成员变量)

mApiClient = new GoogleApiClient.Builder(this) 
     .addApi(ActivityRecognition.API) 
     .addConnectionCallbacks(this) 
     .addOnConnectionFailedListener(this) 
     .build(); 

mApiClient.connect(); 

2. onConnected:

(在MainActivity粘贴此)

@Override 
public void onConnected(@Nullable Bundle bundle) { 
    Intent intent = new Intent(this, ActivityRecognizedService.class); 
    PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates(mApiClient, 3000, pendingIntent); 
} 

3 ActivityRecognizedService类 创建一个新的类,ActivityRecognizedService并粘贴以下代码:

 public ActivityRecognizedService() { 
     super("ActivityRecognizedService"); 
    } 

    public ActivityRecognizedService(String name) { 
     super(name); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     if (ActivityRecognitionResult.hasResult(intent)) { 
      ActivityRecognitionResult result = ActivityRecognitionResult.extractResult(intent); 
      handleDetectedActivities(result.getProbableActivities()); 
     } 
    } 

    private void handleDetectedActivities(List<DetectedActivity> probableActivities) { 


    for (DetectedActivity activity : probableActivities) { 
      switch (activity.getType()) { 
       case DetectedActivity.IN_VEHICLE: { 
        Log.e("ActivityRecogition", "In Vehicle: " + activity.getConfidence()); 
        break; 
       } 
       case DetectedActivity.ON_BICYCLE: { 
        Log.e("ActivityRecogition", "On Bicycle: " + activity.getConfidence()); 
        break; 
       } 
       case DetectedActivity.ON_FOOT: { 
        Log.e("ActivityRecogition", "On Foot: " + activity.getConfidence()); 
        break; 
       } 
       case DetectedActivity.RUNNING: { 
        Log.e("ActivityRecogition", "Running: " + activity.getConfidence()); 
        break; 
       } 



     case DetectedActivity.STILL: { 
      Log.e("ActivityRecogition", "Still: " + activity.getConfidence()); 
      NotificationCompat.Builder builder = new NotificationCompat.Builder(this); 
      builder.setContentText("Are you walking?"); 
      builder.setSmallIcon(R.mipmap.ic_launcher); 
      builder.setContentTitle(getString(R.string.app_name)); 
      NotificationManagerCompat.from(this).notify(0, builder.build()); 
      break; 
     } 
     case DetectedActivity.TILTING: { 
      Log.e("ActivityRecogition", "Tilting: " + activity.getConfidence()); 
      break; 
     } 
     case DetectedActivity.WALKING: { 
      Log.e("ActivityRecogition", "Walking: " + activity.getConfidence()); 
      break; 
     } 
     case DetectedActivity.UNKNOWN: { 
      Log.e("ActivityRecogition", "Unknown: " + activity.getConfidence()); 
      break; 
     } 
    } 

通过onConnected我们称这种服务,在上面的代码中,我们有一个3000毫秒或3秒的回调延迟,我们可以改变这一点。当检测到步行的置信度大于时,此代码会生成敬酒通知。

服务被调用时,调用onHandleIntent(),调用。

4)断开API 删除回调并断开API。

if (mApiClient.isConnected()) { 
     Intent intent2 = new Intent(context, ActivityRecognizedService.class); 
     PendingIntent pendingIntent = PendingIntent.getService(MainActivity.this, 0, intent2, PendingIntent.FLAG_UPDATE_CURRENT); 
     ActivityRecognition.ActivityRecognitionApi.removeActivityUpdates(mApiClient, pendingIntent); 
     mApiClient.disconnect(); 
    } 

来源:How to Recognize User Activity with Activity Recognition

+0

在第4节 - discdonnecting ...我不明白这是从哪里来的? “AnalysingActivity.this” –

+0

@FrankZappa这就是你的背景,你正在做的所有这些活动。为了方便起见,我已将其更改为MainActivity –