Android 后台屏幕锁定

Android 后台屏幕锁定,android,service,background,screen-lock,Android,Service,Background,Screen Lock,作为最后一个应用程序的第一个示例,下面所示的代码激活了禁用和启用屏幕锁定之间的更改 为此,我使用: KeyguardManager keyguardManager = (KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE); KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); lock.reenableKeyguard();

作为最后一个应用程序的第一个示例,下面所示的代码激活了禁用和启用屏幕锁定之间的更改

为此,我使用:

KeyguardManager keyguardManager = (KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE);

KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);  

lock.reenableKeyguard();        
lock.disableKeyguard();
当我将KeyguardLock对象传递给服务APlicacionContext时,屏幕锁的禁用和重新启用不起作用。我不知道为什么会这样。当我不使用该服务并在MainActivity中禁用和重新启用Keyguard时,它可以正常工作,但在该服务中不起作用

有人能帮我修一下程序吗

如果没有,有人知道如何在后台实现禁用和重新启用屏幕锁,我的意思是,当用户离开应用程序时仍然工作吗

谢谢

这是我的代码:

公共类MainActivity扩展了活动{ 私人静电吊挂

KeyguardManager keyguardManager;
KeyguardLock lock;

Button m_btnAlarma = null;
BBDDHandler manejador = new BBDDHandler();
String tipoSeguridadActual;
AplicacionContextos ac = new AplicacionContextos();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    m_btnAlarma = ((Button)findViewById(R.id.button2));

    m_btnAlarma.setOnClickListener(
    new View.OnClickListener() {

        public void onClick(View view) {
            //cambiarEstadoBloqueo(lock);
            lanzarCambio();
        } 
    }); 
} 


 private void lanzarCambio(){

        if (pendingIntent == null){
            //La alarma está desactivada, la activamos
            activarContexto();
        }else{
            //La alarma está activada, la desactivamos
            desactivarContexto();
        }
    }

 /** desactivarRecibir()
     *  Método que desactiva el uso de contextos
     */
    private void desactivarContexto(){

        keyguardManager = null;
        lock = null;

         AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
         alarmManager.cancel(pendingIntent);

         m_btnAlarma.setText("OFF");
         pendingIntent = null;

         // Se cambia la seguridad a alta !!!!!!!!! ESTABLECER
         System.out.println("Seguridad del dispositivo ALTA al desactivarse el uso de contextos");

         Toast.makeText(this, "Hilo detenido", Toast.LENGTH_LONG).show();
    }

    /** activarContexto()
     *  Método que activa el uso de contextos
     */
    private void activarContexto(){ 

        keyguardManager = (KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE);
        lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
        ac.setLock(lock);

        int comprobacionIntervaloSegundos = 60; // 1 minuto

        Intent myIntent = new Intent(this, AplicacionContextos.class);
        pendingIntent = PendingIntent.getService(this, 0, myIntent, 0);

        AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);

        Calendar calendar = Calendar.getInstance(); 
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.add(Calendar.SECOND, 10);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), comprobacionIntervaloSegundos * 1000, pendingIntent);

        m_btnAlarma.setText("ON");
        Toast.makeText(this, "Uso iniciado", Toast.LENGTH_LONG).show();
    }
}
public class AplicacionContextos  extends Service implements Runnable {

NotificationManager mManager;
BBDDHandler manejador = new BBDDHandler();
String tipoSeguridadActual;
private KeyguardLock lock;

/** run()
 *  Hilo de ejecución
 */
public void run() {

    try{
        cambiarEstadoBloqueo(); // se modifica la seguridad cada minuto
    }
    catch(Exception e){     
    }
}

public void setLock(KeyguardLock l){
    System.out.println("Se asigna la variable lock");
    lock = l;
}

public void cambiarEstadoBloqueo (){

    tipoSeguridadActual = manejador.obtenerTipoActual(this);

    if ( tipoSeguridadActual == null){
        System.out.println("Alta");
        manejador.almacenarTipoActual(this, "Alta");
    }
    else{
        // si el bloqueo esta desactivado se activa
        if(tipoSeguridadActual.equals("Baja")){ // Baja
            System.out.println("Alta");
            manejador.modificarSeguridadActual(this, "Alta");
            lock.reenableKeyguard(); 
        // si el bloqueo está activado se desactiva
        }else{ // Alta
            manejador.modificarSeguridadActual(this, "Baja");
            lock.disableKeyguard();
        }
    }  

}

@Override
public void onCreate() {
 // TODO Auto-generated method stub
// Toast.makeText(this, "MyAlarmService.onCreate()", Toast.LENGTH_LONG).show();

 mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
}

@Override
public IBinder onBind(Intent intent) {
 // TODO Auto-generated method stub
// Toast.makeText(this, "MyAlarmService.onBind()", Toast.LENGTH_LONG).show();
 return null;
}

@Override
public void onDestroy() {
 // TODO Auto-generated method stub
 super.onDestroy();
// Toast.makeText(this, "MyAlarmService.onDestroy()", Toast.LENGTH_LONG).show();
}

@Override
public void onStart(Intent intent, int startId) {
 // TODO Auto-generated method stub
 super.onStart(intent, startId);
// Toast.makeText(this, "MyAlarmService.onStart()", Toast.LENGTH_LONG).show();

//Creamos un hilo que obtendra la informaci—n de forma as’ncrona
    Thread thread = new Thread(this);
    thread.start();
}

@Override
public boolean onUnbind(Intent intent) {
 // TODO Auto-generated method stub
// Toast.makeText(this, "MyAlarmService.onUnbind()", Toast.LENGTH_LONG).show();
 return super.onUnbind(intent);
}
}