我正在使用Google的活动识别API,并且我已经创建了一个IntentService来处理活动更新。我应该每5秒钟收到一次更新,所以当我第一次安装并在手机上启动应用程序时就是这样。然后我做了一些更改,现在我只收到一个更新ONCE。我不知道为什么会发生这种情况,因为它刚才工作正常。这是我的代码:
连接到API:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
activityNumber = (TextView) findViewById(R.id.activityNumber);
File root = Environment.getExternalStorageDirectory();
csvFile = new File(root,"ActivityRecognition.csv");
activityList = new ArrayList<>();
mApiClient = new GoogleApiClient.Builder(this)
.addApi(ActivityRecognition.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mApiClient.connect();
activityReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
activityList.add(new RecognizedActivity(intent.getLongExtra(EXTRA_TIMESTAMP, 0), intent.getStringExtra(EXTRA_ACTIVITY), intent.getIntExtra(EXTRA_CONFIDENCE, 0)));
activityNumber.setText(String.valueOf(activityList.size()));
}
};
IntentFilter filter = new IntentFilter();
filter.addAction( ACTION_ACTIVITY_RECOGNIZED );
registerReceiver(activityReceiver, filter);
}
@Override
public void onConnected(@Nullable Bundle bundle) {
Log.i("Connected", "NOW");
Intent i = new Intent(this,ActivityRecognitionService.class);
PendingIntent pi = PendingIntent.getService(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates( mApiClient, 5000, pi);
}
我的IntentService:
public ActivityRecognitionService() {
super("ActivityRecognitionService");
}
@Override
protected void onHandleIntent(Intent intent) {
Log.i("HandleIntent", "NOW");
if (intent != null) {
if(ActivityRecognitionResult.hasResult(intent)) {
ActivityRecognitionResult result = ActivityRecognitionResult.extractResult(intent);
handleDetectedActivities(result.getProbableActivities());
}
}
}
private void handleDetectedActivities(List<DetectedActivity> probableActivities) {
Log.i("HandleActivity", "NOW");
calendar = Calendar.getInstance();
activityIntent = new Intent();
activityIntent.setAction(MainActivity.ACTION_ACTIVITY_RECOGNIZED);
for( DetectedActivity activity : probableActivities ) {
switch( activity.getType() ) {
case DetectedActivity.IN_VEHICLE: {
activityIntent.putExtra(MainActivity.EXTRA_TIMESTAMP, calendar.getTime().getTime());
activityIntent.putExtra(MainActivity.EXTRA_ACTIVITY, "In Vehicle");
activityIntent.putExtra(MainActivity.EXTRA_CONFIDENCE, activity.getConfidence());
break;
}
case DetectedActivity.ON_BICYCLE: {
activityIntent.putExtra(MainActivity.EXTRA_TIMESTAMP, calendar.getTime().getTime());
activityIntent.putExtra(MainActivity.EXTRA_ACTIVITY, "On Bicycle");
activityIntent.putExtra(MainActivity.EXTRA_CONFIDENCE, activity.getConfidence());
break;
}
case DetectedActivity.ON_FOOT: {
activityIntent.putExtra(MainActivity.EXTRA_TIMESTAMP, calendar.getTime().getTime());
activityIntent.putExtra(MainActivity.EXTRA_ACTIVITY, "On Foot");
activityIntent.putExtra(MainActivity.EXTRA_CONFIDENCE, activity.getConfidence());
break;
}
case DetectedActivity.RUNNING: {
activityIntent.putExtra(MainActivity.EXTRA_TIMESTAMP, calendar.getTime().getTime());
activityIntent.putExtra(MainActivity.EXTRA_ACTIVITY, "Running");
activityIntent.putExtra(MainActivity.EXTRA_CONFIDENCE, activity.getConfidence());
break;
}
case DetectedActivity.STILL: {
activityIntent.putExtra(MainActivity.EXTRA_TIMESTAMP, calendar.getTime().getTime());
activityIntent.putExtra(MainActivity.EXTRA_ACTIVITY, "Still");
activityIntent.putExtra(MainActivity.EXTRA_CONFIDENCE, activity.getConfidence());
break;
}
case DetectedActivity.TILTING: {
activityIntent.putExtra(MainActivity.EXTRA_TIMESTAMP, calendar.getTime().getTime());
activityIntent.putExtra(MainActivity.EXTRA_ACTIVITY, "Tilting");
activityIntent.putExtra(MainActivity.EXTRA_CONFIDENCE, activity.getConfidence());
break;
}
case DetectedActivity.WALKING: {
activityIntent.putExtra(MainActivity.EXTRA_TIMESTAMP, calendar.getTime().getTime());
activityIntent.putExtra(MainActivity.EXTRA_ACTIVITY, "Walking");
activityIntent.putExtra(MainActivity.EXTRA_CONFIDENCE, activity.getConfidence());
break;
}
case DetectedActivity.UNKNOWN: {
activityIntent.putExtra(MainActivity.EXTRA_TIMESTAMP, calendar.getTime().getTime());
activityIntent.putExtra(MainActivity.EXTRA_ACTIVITY, "Unknown");
activityIntent.putExtra(MainActivity.EXTRA_CONFIDENCE, activity.getConfidence());
break;
}
}
Log.i("BROADCAST SENT", "NOW");
sendBroadcast(activityIntent);
}
}
我不确定问题是否与IntentService或ActivityRecognitionAPI有关。
编辑:好的,所以我让应用程序运行了一段时间,我实际上收到了多个更新,但是当我得到它们时,似乎完全随机。我在10分钟内收到3分。 编辑2:我尝试摇动手机30秒,现在我又每5秒钟收到一次更新。我不知道发生了什么。