Desbloquear dispositivo, mostrar un texto y bloquearlo de nuevo.

Para la necesidad de mi aplicación, tengo que mostrar un mensaje en la pantalla, incluso si la lockscreen está habilitado, luego esperar 3 segundos, que tengo que bloquear de nuevo el teléfono, ya que no quiero que haga llamadas no deseadas en su Bolsillos

Primera parte es fácil:

if (PreferenceManager.getDefaultSharedPreferences( getBaseContext()).getBoolean("wake", false)) { KeyguardManager kgm = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); boolean isKeyguardUp = kgm.inKeyguardRestrictedInputMode(); WakeLocker.acquire(ProtoBenService.this); Intent myIntent = new Intent(ProtoBenService.this,LockActivity.class); myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (isKeyguardUp) { ProtoBenService.this.startActivity(myIntent); } else Toast.makeText(ProtoBenService.this.getBaseContext(), intention, Toast.LENGTH_LONG).show(); WakeLocker.release(); } 

Con esta clase:

 public abstract class WakeLocker { private static PowerManager.WakeLock wakeLock; public static void acquire(Context ctx) { if (wakeLock != null) wakeLock.release(); PowerManager pm = (PowerManager) ctx.getSystemService(Context.POWER_SERVICE); wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, "CobeIm"); wakeLock.acquire(); } public static void release() { if (wakeLock != null) wakeLock.release(); wakeLock = null; } } 

Y la Actividad:

 public class LockActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Window window = getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); TextView tv = new TextView(this); tv.setText("This is working!"); tv.setTextSize(45); setContentView(tv); Runnable mRunnable; Handler mHandler = new Handler(); mRunnable = new Runnable() { @Override public void run() { LockActivity.this.finish(); } }; mHandler.postDelayed(mRunnable, 3 * 1000); } } 

Por lo tanto, esto es agradable, el teléfono puede mostrar mi texto!

El único problema viene cuando quiero bloquear de nuevo el teléfono, parece que el bloqueo del teléfono está protegido por el sistema …

  • Desactivar programaticamente la pantalla y bloquear el teléfono
  • Cómo bloquear el android programatically

Creo que mis usuarios no entienden el Administrador de dispositivos y no podrán activarlo. ¿Hay alguna solución para bloquear la pantalla sin las funciones Admin de dispositivo?

Estoy bastante seguro de que tiene que utilizar las funciones de administración de dispositivos para bloquear la pantalla.

  protected static void initiateDeviceLock(Context context) { ComponentName componentName = new ComponentName(context, MyDeviceAdminReceiver.class); DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); boolean active = dpm.isAdminActive(componentName); Log.i(context.getClass().getSimpleName(), "Active (in initiateDeviceLock) = " + String.valueOf(active)); if (active) { dpm.lockNow(); } } 

Para ayudar a la configuración del usuario las funciones de administración de dispositivos, puede llevarlas a la página de configuración:

  Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); ComponentName componentName = new ComponentName(TestActivity.this, MyDeviceAdminReceiver.class); intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName); startActivityForResult(intent, CODE); 

Utilicé el siguiente método para bloquear y desbloquear el teléfono.

Inicializando

  KeyguardLock keyguard; KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); keyguard = km.newKeyguardLock("MyApp"); 

Desbloquear el teléfono

 keyguard.disableKeyguard(); 

Volver a bloquear el teléfono

 keyguard.reenableKeyguard(); 

Para encender la pantalla

  getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

Y no te olvides de usar el siguiente permiso

 <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> 
  • Mostrar texto del ticker de notificación de la barra de estado cuando la pantalla está bloqueada en Android
  • Técnicas de implementación de la pantalla de bloqueo personalizado
  • Cómo bloquear la pantalla del dispositivo Android en Android 4.4 y 5.0+
  • Emulador de Android 4.2.2 no se muestra agregar opción de widget en la pantalla de bloqueo
  • Android Lollipop - controles de música de pantalla de bloqueo
  • Iniciar una actividad cuando la pantalla
  • Obtención dinámica del nombre del paquete de pantalla de bloqueo de android
  • La actividad de diálogo se oculta bajo la pantalla de llamada cuando el bloqueo seguro está activado, android
  • Notificación de la pantalla de bloqueo de Android Facebook
  • Una forma de obtener desbloquear evento en android?
  • Evitar la expansión de la barra de estado
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.