2016-02-20 2 views
0

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

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

Спасибо!

+0

Все о Google Play API, услуги, деятельность API распознавания включены, являются закрытым исходным кодом, так что я сомневаюсь, что вы будете в состоянии найти много на пути «как это работает» , – ianhanniballake

+0

Хм ... хорошо! Благодаря! –

ответ

2

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

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

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

В вашем 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 из MainActivity

(Убедитесь, что вы объявили публичный GoogleApiClient mApiClient как переменную)

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

mApiClient.connect(); 

2. onConnected:

(Paste это в 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(), что в свою очередь вызывает 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

+0

В разделе 4 - discdonnecting ... Я не понимаю, откуда это взялось? «AnalysingActivity.this» –

+0

@FrankZappa - это ваш контекст, действие, через которое вы все это делаете. Для удобства я изменил его на MainActivity –

Смежные вопросы