替换系统锁屏遇到的问题

博主分享了在开发锁屏应用时遇到的挑战,详细描述了如何去除系统默认锁屏并实现自定义锁屏界面的过程,关键在于在Activity的onCreate方法中进行特定设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做一个锁屏的app,搜索了很多文章,也下载了很多demo,但是都没有讲系统锁屏去掉,捣鼓将近一天,终于找到原因,还要在显示的activity界面的oncreate方法中加上:

//<span style="white-space:pre">	</span>添加了这两个flag以后,系统锁屏就被替换成了我们自己的锁屏界面
	getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);   
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);   

自定义service:

public class LockScreenService extends Service {
	private static final String TAG = "LockScreenService";
	private Intent iLockIntent = null;
	private Handler mainHandler = null; // 与主Activity通信的Handler对象

	@Override
	public IBinder onBind(Intent arg0) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void onCreate() {
		super.onCreate();
		Log.d(TAG, "------onCreate()------");

		//iLockIntent = new Intent(LockScreenService.this,LockScreenActivity.class);
		iLockIntent = new Intent(LockScreenService.this,LockScreenTurnPageActivity.class);
		iLockIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

		/* 注册广播 */
		IntentFilter mScreenOnFilter = new IntentFilter("android.intent.action.SCREEN_ON");
		LockScreenService.this.registerReceiver(mScreenOnReceiver,mScreenOnFilter);

		/* 注册广播 */
		IntentFilter mScreenOffFilter = new IntentFilter("android.intent.action.SCREEN_OFF");
		LockScreenService.this.registerReceiver(mScreenOffReceiver,	mScreenOffFilter);
	}

	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		Log.d(TAG, "-----onStartCommand()------");
		return Service.START_STICKY;

	}

	@Override
	public void onDestroy() {
		super.onDestroy();
		Log.d(TAG, "-----onDestroy()------");
		LockScreenService.this.unregisterReceiver(mScreenOnReceiver);
		LockScreenService.this.unregisterReceiver(mScreenOffReceiver);
		// 在此重新启动
		startService(new Intent(LockScreenService.this, LockScreenService.class));
	}

	private KeyguardManager mKeyguardManager = null;
	private KeyguardManager.KeyguardLock mKeyguardLock = null;
	// 屏幕变亮的广播,我们要隐藏默认的锁屏界面
	private BroadcastReceiver mScreenOnReceiver = new BroadcastReceiver() {
		@Override
		public void onReceive(Context context, Intent intent) {
			Log.d(TAG, "-----BroadcastReceiver:mScreenOnReceiver------");
			Log.i(TAG, intent.getAction());
			if (intent.getAction().equals("android.intent.action.SCREEN_ON")) {
				Log.i(TAG,	"----------------- android.intent.action.SCREEN_ON------");
				// mKeyguardManager = (KeyguardManager)context.getSystemService(Context.KEYGUARD_SERVICE);
				// mKeyguardLock = mKeyguardManager.newKeyguardLock("Zoom Lock Screen ON");
				// mKeyguardLock.disableKeyguard();
			}
		}

	};

	// 屏幕变暗/变亮的广播 , 我们要调用KeyguardManager类相应方法去解除屏幕锁定
	private BroadcastReceiver mScreenOffReceiver = new BroadcastReceiver() {
		@Override
		public void onReceive(Context context, Intent intent) {
			Log.d(TAG, "-----BroadcastReceiver:mScreenOffReceiver------");
			String action = intent.getAction();

			Log.i(TAG, intent.toString());
			if (action.equals(Intent.ACTION_TIME_TICK)|| action.equals(Intent.ACTION_TIMEZONE_CHANGED)) {
				mainHandler.obtainMessage(1).sendToTarget();
			}

			if (action.equals("android.intent.action.SCREEN_OFF")|| action.equals("android.intent.action.SCREEN_ON")) {
				mKeyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
				mKeyguardLock = mKeyguardManager.newKeyguardLock("Zoom Lock Screen OFF");
				mKeyguardLock.disableKeyguard();
				startActivity(iLockIntent);
			}
		}
	};
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值