【问题标题】:My Android ActivityRecognition implementation is too slow我的 Android ActivityRecognition 实现太慢了
【发布时间】:2016-08-20 10:02:24
【问题描述】:

我使用 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");
        }
    }
}

【问题讨论】:

    标签: android activity-recognition


    【解决方案1】:

    我认为您的代码没有任何问题,它看起来与我的完全相同。 如果您的“detectionIntervalMillis”值 = 0,则检测的正常速率为 3 秒 -> 6 秒。 但是当你在 2 种不同的活动之间切换时(例如:从步行 -> 在车里......)会花费更多时间,可能需要 20 到 40 秒。

    【讨论】:

    • 我在静止和行走之间切换(反之亦然),最多需要 1 分钟!这是没用的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    相关资源
    最近更新 更多