Да Вам необходимо выполнить сервис, работающий в фоновом режиме, вместе с входами датчика приближения для его использования независимо от вашего приложения переднего плана. Следующий код показывает сервис, который работает в фоновом режиме
public class PocketService extends Service implements SensorEventListener {
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
Toast.makeText(this, "My Service Created", Toast.LENGTH_SHORT).show();
Log.d("TAG", "onCreate");
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
mSensorManager.registerListener(this, mProximity,
SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
public void onDestroy() {
Toast.makeText(this, "My Service Stopped", Toast.LENGTH_SHORT).show();
Log.d("TAG", "onDestroy");
mSensorManager.unregisterListener(this);
}
@Override
public int onStartCommand(Intent intent, int flags, int startid) {
Toast.makeText(this, "My Service Started", Toast.LENGTH_SHORT).show();
Log.d("TAG", "onStart");
return START_STICKY;
}
public void onSensorChanged(SensorEvent event) {
Sensor sensor = event.sensor;
if (sensor.getType() == Sensor.TYPE_PROXIMITY) {
distance = event.values[0];
if (distance < 1) {
enableScreenLock();
} else {
disableScreenLock();
}
}
}
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub
}
}
Вы должны начать это от деятельности, и она будет работать в фоновом режиме, пока ваш менеджер задач убивает его из-за жесткой нехватки памяти. Но он попытается воссоздать свой экземпляр, пока память доступна, потому что метод onStartCommand() возвращает START_STICKY.
Вы пытались зарегистрировать этого слушателя в службе? – Huang