【问题标题】:ActivityRecognitionAPI Documentation/ExplanationActivityRecognitionAPI 文档/说明
【发布时间】:2016-02-20 14:13:04
【问题描述】:

有人知道 Google ActivityRecognitionAPI 的精彩文档或解释吗?除了这个:https://developers.google.com/android/reference/com/google/android/gms/location/ActivityRecognitionApi

这个文档太弱了,我想了解更多关于这个 API 的信息,以及它是如何工作的! 如果您对这个 API 的工作原理有一些了解,我会非常高兴! =)

谢谢!

【问题讨论】:

  • 所有 Google Play 服务 API(包括 Activity Recognition API)都是封闭源代码,所以我怀疑您能否找到很多关于“它是如何工作的”的信息。

标签: android google-api sensors activity-recognition


【解决方案1】:

就其工作原理而言,它是一个封闭源代码的 Google API,因此您无法得到确切的答案,但大多数人说这主要依赖于加速度计传感器,尽管也有人说它也使用陀螺仪和其他一些传感器。

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

1.添加播放服务依赖

在您的 build.gradle (module:app) 中,添加:

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

2。添加权限

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

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

3.在 MainActivity 的 onCreate 中连接 API

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

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

mApiClient.connect();

2。已连接:

(将其粘贴到您的 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 秒的回调延迟,我们可以改变它。当检测到 walking 的置信度大于 75 时,此代码会生成 toast 通知。

当服务被调用时,onHandleIntent() 被调用,而后者又调用handleDetectedActivities()

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

【讨论】:

  • 在第 4 节 - discdonnecting...我不明白这是从哪里来的? "AnalysingActivity.this"
  • @FrankZappa 那是你的上下文,你通过它做这一切的活动。为了方便,我把它改成了 MainActivity
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-12
相关资源
最近更新 更多