IntentService停止接收意图

时间:2017-10-21 18:00:41

标签: android google-play-services android-intentservice activity-recognition

我正在使用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秒钟收到一次更新。我不知道发生了什么。

0 个答案:

没有答案