Android 解锁设备,显示文本,然后再次锁定
为了我的应用程序的需要,我需要在屏幕上显示一条消息,即使锁定屏幕已启用,然后等待3秒钟,然后我必须再次锁定手机,因为我不希望它在您的口袋中拨打不需要的电话Android 解锁设备,显示文本,然后再次锁定,android,lockscreen,device-admin,Android,Lockscreen,Device Admin,为了我的应用程序的需要,我需要在屏幕上显示一条消息,即使锁定屏幕已启用,然后等待3秒钟,然后我必须再次锁定手机,因为我不希望它在您的口袋中拨打不需要的电话 keyguard.reenableKeyguard(); 第一部分很简单: if (PreferenceManager.getDefaultSharedPreferences( getBaseContext()).getBoolean("wake", false)) { KeyguardManager kgm = (
keyguard.reenableKeyguard();
第一部分很简单:
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();
}
keyguard.reenableKeyguard();
在本课程中:
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;
}
}
keyguard.reenableKeyguard();
以及活动:
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);
}
}
keyguard.reenableKeyguard();
所以,这很好,手机可以显示我的文字
keyguard.reenableKeyguard();
唯一的问题是当我想再次锁定手机时,似乎锁定手机受到系统的保护
keyguard.reenableKeyguard();
我认为我的用户不会理解设备管理员,也无法激活它。在没有设备管理功能的情况下,是否有办法锁定屏幕?我很确定您必须使用设备管理功能来锁定屏幕
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();
}
}
keyguard.reenableKeyguard();
要帮助用户设置设备管理功能,您可以将其转到设置页面:
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);
keyguard.reenableKeyguard();
我使用以下方法锁定和解锁手机
keyguard.reenableKeyguard();
初始化
KeyguardLock keyguard;
KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
keyguard = km.newKeyguardLock("MyApp");
keyguard.reenableKeyguard();
解锁手机
keyguard.disableKeyguard();
keyguard.reenableKeyguard();
再次锁定电话
keyguard.reenableKeyguard();
打开屏幕
keyguard.reenableKeyguard();
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);
别忘了使用以下权限
keyguard.reenableKeyguard();
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
嘿,利奥,我想在我的应用程序接收广播时打开屏幕并解锁,还有其他设备管理策略吗?@BipinVayalu我想你也需要使用设备管理功能解锁屏幕。但签出AlarmManager,这可能会满足您的需要。感谢您的回复,我使用了一个空白活动,该活动将以屏幕开始并解锁相关标志。