私の最終的なアプリケーションへの最初の近似として、私が実装したコード (以下に示す) は、画面ロックの無効化と有効化の間の変更を有効にします。
このために、私は以下を使用します:
KeyguardManager keyguardManager = (KeyguardManager)getSystemService(Activity.KEYGUARD_SERVICE);
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
lock.reenableKeyguard();
lock.disableKeyguard();
KeyguardLock オブジェクトをサービス AplicacionContextos に渡すと、画面ロックの無効化と再有効化が機能しません。これが起こっている理由はわかりません。サービスを使用せず、MainActivity で Keyguard を無効にして再度有効にすると、正常に動作しますが、サービスでは動作しません。
誰かが私のプログラムを修正するのを手伝ってくれますか?
そうでない場合、バックグラウンドで画面ロックの無効化と再有効化を実装する方法を知っている人はいますか?つまり、ユーザーがアプリケーションを離れても機能しますか?
ありがとう!
これは私のコードです:
public class MainActivity extends Activity { private static PendingIntent pendingIntent;
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);
}
}