ActivityRecognitionAPI Документация / Пояснения

Кто-нибудь знает отличную документацию или объяснение Google ActivityRecognitionAPI? Кроме этого: https://developers.google.com/android/reference/com/google/android/gms/location/ActivityRecognitionApi

Этот документ настолько слаб, что я хотел бы узнать больше об этом API и о том, как он работает! И если у вас есть представление о том, как работает этот API, я буду очень рад! знак равно

Спасибо!

1 ответ

Что касается того, как это работает, то это API Google с закрытым исходным кодом, поэтому вы не можете получить точный ответ на этот вопрос, но большинство людей говорят, что это в основном полагается на датчик акселерометра, хотя некоторые также говорят, что он использует гироскоп и некоторые другие датчики.

Как использовать это, как здесь пример кода:

1. Добавление зависимости Play Services

В вашем build.gradle (модуль: приложение) добавьте:

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 of MainActivity

(Убедитесь, что вы объявили публичный 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 секунды, мы можем изменить это. Этот код генерирует тост-уведомление при обнаружении ходьбы с уверенностью, превышающей 75.

Когда услуга вызывается, 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();
    }

Источник: Как распознать активность пользователя с помощью распознавания активности

Другие вопросы по тегам