最近在做一个锁屏的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);
}
}
};
}