适用于多个活动的后台服务应用的Android架构

时间:2012-12-11 23:20:47

标签: android android-intent

我正在Android中开发一个应用程序。 一旦启动,我创建了一个后台服务,它扩展了IntentService并实现了SensorEventListener。 该班负责收听位置更新和传感器更新,例如来自重音计的更新。

然后我创建主窗口,它检查例如是否启用了GPS以及其他一些东西。如果一切正确,那么从主Activity开始另一个。 我这样创建它:

Intent startDrIntent = new Intent(MainActivity.this, DrActivity.class);
MainActivity.this.startActivity(startDrIntent);

现在我想在DrActivity中显示坐标和加速度计值。

获取活动中显示的那些值的最佳方法是什么? 我能想到这两个:

1)以某种方式在应用程序中有一个活动的处理程序,并从每个传感器上的感知服务类或位置更新使用app处理程序(静态可能?)并更改TextView(s)的值

2)在应用程序中有坐标和传感器的公共静态值,然后从Activity中消耗它(这里的问题是如何让Activity知道有更新。

3)还有什么更好的吗?

我无法使用AsyncTask,因为后台服务将被多个活动使用,而不仅仅是一个。 提前致谢!吉列尔莫。

1 个答案:

答案 0 :(得分:0)

为什么不让DrActivity同时实现SensorEventListener呢?

public class DrActivity implements SensorEventListener
{
    private SensorManager mSensorManager;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        mSensorManager.registerListener(this,mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    public void onAccuracyChanged(Sensor arg0, int arg1) {
    // TODO Auto-generated method stub

   }

   @Override
   public void onSensorChanged(SensorEvent arg0) 
    {
        // TODO Auto-generated method stub
        if(arg0.sensor.getType()==Sensor.TYPE_LIGHT)
        {
             textLightSensorData.setText("Light Sensor Date:"
           + String.valueOf(arg0.values[0]));
        }
    }
}