2012-02-10 103 views
0

我可以使用Device Policy Manager在Android中锁定屏幕。即使用户在其他应用程序中(Globaly),它也会锁定屏幕。同样的事情,我想要解锁。用户在我的应用程序中锁定屏幕时,我的应用程序会解锁屏幕。但是,当用户用其他应用程序锁定屏幕时,它不是解锁屏幕。无法在Android中解锁屏幕

我正在使用接近传感器来锁定/解锁屏幕,并在解锁的onPause方法中注册ProximitySensorEventListener。它只会在我的应用程序内解锁一个屏幕。如何做一个屏幕应该解锁一个屏幕与任何其他应用程序(全球)?? PLZ帮助我解决这个问题。

在此先感谢。

+1

您是否尝试在服务中注册此侦听器? – Huang 2012-02-10 07:49:43

回答

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。