2012-02-10 3 views
0

Я могу заблокировать экран в android, используя диспетчер политики устройства. Он блокирует экран, даже если пользователь находится в других приложениях (Globaly). То же самое, что я хочу сделать с Unlock. Мое приложение открывает экран, когда пользователь блокирует экран в моем приложении. Но когда пользователь блокирует экран с другим приложением, он не разблокирует экран.Невозможно разблокировать экран в android

Я использую датчик приближения для блокировки/разблокировки экрана и регистрации ProximitySensorEventListener в методе onPause для разблокировки. Он откроет экран только в моем приложении. Как сделать экран должен разблокировать экран с любым другим приложением (Globaly)? PLZ помочь мне в этом вопросе.

Заранее спасибо.

+1

Вы пытались зарегистрировать этого слушателя в службе? – Huang

ответ

2

Да Вам необходимо выполнить сервис, работающий в фоновом режиме, вместе с входами датчика приближения для его использования независимо от вашего приложения переднего плана. Следующий код показывает сервис, который работает в фоновом режиме

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.

Смежные вопросы