Как это работает, это закрытый 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
Все о Google Play API, услуги, деятельность API распознавания включены, являются закрытым исходным кодом, так что я сомневаюсь, что вы будете в состоянии найти много на пути «как это работает» , – ianhanniballake
Хм ... хорошо! Благодаря! –