要求:
启动应用后灭屏.然后power按键亮屏之后显示应用界面不是锁屏界面.
方法:
屏蔽锁屏界面,这个功能只在滑动锁屏有效,谷歌估计考虑到安全问题,没有放开权限,毕竟3方应用并不可靠.
方法1
//在oncreate方法加
final Window win = getWindow();
final WindowManager.LayoutParams params = win.getAttributes();
params.flags |= WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD;
方法2
以前的方法,由于KeyguardLock应该过时,建议上面的方法,而且使用KeyguardLock方法,还要考虑退出的时候要把锁屏还原.
KeyguardManager mKeyguardManager;
KeyguardManager.KeyguardLock mKeyguardLock;
public void controlKeyguard(boolean enable) {
if (true) return;
if (mKeyguardManager == null || mKeyguardLock == null) {
mKeyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
mKeyguardLock = mKeyguardManager.newKeyguardLock("FxLock");
}
if (enable) {
mKeyguardLock.reenableKeyguard();
} else {
mKeyguardLock.disableKeyguard();
}
Log.i("wangcan", enable ? "reenableKeyguard" : "disableKeyguard");
}
如果要设置后台启动,方法2 需要在服务里面监听亮屏广播,然后启动界面.下面启动用方法1,Systemui(9.0)的滑动锁屏要先一步启动,8.1 甚至需要滑动解锁才会进入应用界面
public class ScreenOnService extends Service {
private BroadcastReceiver powerOnOffReceiver;
KeyguardManager mKeyguardManager;
KeyguardManager.KeyguardLock mKeyguardLock;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onCreate() {
super.onCreate();
powerOnOffReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.SCREEN_ON")) {
Log.i("wangcan", "startActivity");
Intent lockIntent = new Intent(context, MainActivity.class);
lockIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(lockIntent);
} else if (intent.getAction().equals("android.intent.action.SCREEN_OFF")) {
//屏蔽手机内置的锁屏
controlKeyguard(false);
//启动该第三方锁屏
}
}
};
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.intent.action.SCREEN_ON");
intentFilter.addAction("android.intent.action.SCREEN_OFF");
registerReceiver(powerOnOffReceiver, intentFilter);
}
public void controlKeyguard(boolean enable) {
if(mKeyguardManager==null || mKeyguardLock ==null){
mKeyguardManager = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
mKeyguardLock = mKeyguardManager.newKeyguardLock("FxLock");
}
if (enable) {
mKeyguardLock.reenableKeyguard();
} else {
mKeyguardLock.disableKeyguard();
}
Log.i("wangcan", enable ? "reenableKeyguard" : "disableKeyguard");
}
@Override
public void onDestroy() {
super.onDestroy();
controlKeyguard(true);
unregisterReceiver(powerOnOffReceiver);
}
}