Моя реализация Android ActivityRecognition слишком медленная

android activity-recognition

525 просмотра

1 ответ

Я использовал Google ActivityRecognitionApi для отслеживания, гуляю я или нет. Но это кажется слишком медленным. В чем проблема? Это не связано с подключением к интернету.

[Walking.java]

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_walking);
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addApi(ActivityRecognition.API).addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this).build();
    mGoogleApiClient.connect();
}
@Override
public void onConnected(Bundle bundle) {
    Intent intent = new Intent(this, ActivityRecognitionService.class);
    PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates(mGoogleApiClient, 1000, pendingIntent);
}
@Override
public void onConnectionSuspended(int i) {
    Toast.makeText(Walking.this, "Hello1", Toast.LENGTH_SHORT).show();
    Log.e("Connection Failed : ", "Connection Failed");
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
    Toast.makeText(Walking.this, "Hello2", Toast.LENGTH_SHORT).show();
    Log.e("Connection Failed : ", "Connection Failed");
}

[ActivityRecognitionService.java]

import java.util.List;
public class ActivityRecognitionService extends IntentService {
    public static final String ACTION_IntentService = "com.example.android.skywalker.RESPONSE";
    public static final String ACTIVITY_RESULT = "RESULT";
    public Intent localIntent;
    public ActivityRecognitionService() {
        super("ActivityRecognitionService");
    }
    public ActivityRecognitionService(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) {
        int Flag = 0;

        for(DetectedActivity activity : probableActivities) {
            if(activity.getType() == DetectedActivity.ON_FOOT) {
                Flag = 1;
                if (activity.getConfidence() >= 50) Log.e("YES", "YES");
                break;
            }
        }

        //Intent intent = new Intent(ActivityRecognitionService.this, Walking.class);
        if (Flag == 0) {
            //localIntent = new Intent(Walking.BROADCAST_ACTION).putExtra(Walking.RESPONSE_STATUS, "YES");
            Log.e("NO", "NO");
        }
    }
}
Автор: Hyeon Gyu Jang Источник Размещён: 08.11.2019 11:09

Ответы (1)


2 плюса

Я не думаю, что есть какие-то проблемы с вашим кодом, он выглядит точно так же, как мой. Нормальная скорость обнаружения составляет 3 секунды -> 6 секунд, если значение «selectionIntervalMillis» = 0. Но когда вы переключаетесь между двумя различными действиями (например: от ходьбы -> в машине ....), это займет больше времени, возможно от 20 до 40 лет.

Автор: Hoa Nguyen Размещён: 01.09.2016 03:21
Вопросы из категории :
32x32