2011-06-13 54 views
2

我将如何去实现贯穿整个应用程序的线程。我看过服务,但我很确定这不是我想要的。即使应用程序已关闭,我也不希望线程不断检查。我只想在应用程序的后台运行一个线程(即使我在活动之间切换),以便持续检查用户是否将电话抬到了他/她的耳边。如果用户那么它会执行一个动作。这样的事情的任何例子?连续线程来监视硬件接近传感器

回答

5

您不需要此线程或服务。请参阅SensorManager的Android API文档中的示例。另外,请参阅下面的示例:

public class SensorActivity extends Activity, implements SensorEventListener { 
    private final SensorManager mSensorManager; 
    private final Sensor mSensor; 

    public SensorActivity() { 
     mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 
     mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); 
    } 

    protected void onResume() { 
     super.onResume(); 
     mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_NORMAL); 
    } 

    protected void onPause() { 
     super.onPause(); 
     mSensorManager.unregisterListener(this); 
    } 

    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
    } 

    public void onSensorChanged(SensorEvent event) { 
     // TODO: implement your action here. 
    } 
} 
1

这是最好的服务。在您的活动开始时绑定到服务,并在活动完成时解除绑定。该服务应该在绑定时开始监听,并在从未绑定时停止。

+0

现在在此服务中,我将运行一个线程来检查传感器?如果它识别出这个动作,然后执行某个任务? – 2011-06-13 19:39:56

+1

您不需要运行线程来管理这个线程,只需在加速度计传感器服务上注册一个监听器即可。如果您使用Google SENSOR_ACCELEROMETER,可以使用各种示例(检测不同的动作类型 - 主要是摇动)。 – mah 2011-06-13 20:28:09