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:
- Unity3D Android Lockscreen no se muestra cuando la pantalla se agota. (Wakelock?)
- Iniciar actividad externa mientras el teléfono está bloqueado
- Controles del reproductor de medios en la notificación
- Establecer lockscreen a "None" por programa?
- ¿Cómo probar widgets de pantalla bloqueada de Android en un emulador?
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?
- Activar o desactivar la pantalla PatternLock del código
- Método getWindow () no puede utilizar
- Actividad transparente a pantalla completa (sin título y barra de estado) no funciona ... ¿por qué?
- Android: detecta pulsaciones de teclas en Android cuando la pantalla está bloqueada
- ¿Cree la lockscreen personalizada para android 4.0 o arriba?
- Mostrar información personalizada en la pantalla de bloqueo en Android
- Una forma de obtener captura doble toque en la pantalla de bloqueo de Android?
- Notificación de pantalla de bloqueo de Android Vista personalizada con ripple y doble toque
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" />