我可以使用设备策略管理器锁定android中的屏幕。即使用户处于其他应用程序(Globaly),它也会锁定屏幕。我想用Unlock做同样的事情。当用户在我的应用程序中锁定屏幕时,我的应用程序会解锁屏幕。但是当用户使用其他应用程序锁定屏幕时,它不会解锁屏幕。
我正在使用接近传感器来锁定/解锁屏幕并在onPause方法中注册ProximitySensorEventListener以解锁。它只会在我的应用程序内解锁一个屏幕。如何做一个屏幕应解锁一个屏幕与任何其他应用程序(Globaly)?请帮助我解决这个问题。
提前致谢。
答案 0 :(得分: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。