如何从服务向片段发送整数值?

时间:2017-05-13 14:22:58

标签: android android-service

我正在尝试从我的步数计数器服务(即步数)中获取数据以显示在片段上。这是我的服务:

public class StepCounterService extends Service implements SensorEventListener {

SensorManager sensorManager;
boolean running = false;
static int initialStepCount = 0;
static int stepCount = 0;

@Override
public void onCreate() {
    super.onCreate();

    sensorManager = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);

}

@Override
public void onSensorChanged(SensorEvent event) {
    if (initialStepCount == 0) {
        initialStepCount = (int) event.values[0];
    }

    stepCount = (int)event.values[0] - initialStepCount;

    if (running) {
        // tv_steps.setText(String.valueOf(stepCount));
    }
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {

}

@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    running = true;
    Sensor countSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
    if (countSensor != null) {
        sensorManager.registerListener(this, countSensor, SensorManager.SENSOR_DELAY_NORMAL);
    } else {
    }
    return super.onStartCommand(intent,flags,startId);
}

@Override
public void onDestroy() {

}
}

如何发送stepCount值以在TextView中的片段中显示?最好的方法是什么?

3 个答案:

答案 0 :(得分:0)

要在服务和其他组件之间发送数据,您可以执行绑定服务; https://developer.android.com/guide/components/bound-services.html这是Android在组件之间进行通信的最佳方式。

答案 1 :(得分:0)

有几种方法可以做到:

  1. 使用LocalBroadCastReceiver
  2. 使用EventBus。我更喜欢这种方式,因为它比前一个只有几行代码容易得多:

    EventBus.getDefault().post(new YourObjectWithANumber());

答案 2 :(得分:0)

或许,在您的特定情况下,最好保存并保留文件或数据库中的步骤数,以便即使应用程序重新启动也可以在UI中显示它