Android 4.0シールドホームキー実装
2244 ワード
最近、スクリーンロックを研究したが、従来の方法に従って、従来の方法は以下の通りである.
しかし、この方法は4.0のシステムでは失効し、homeでデスクトップに戻ります.Apktoolはいくつかのスクリーンロックソフトウェアを発見した後、WindowManagerのaddviewメソッドでウィンドウにviewを追加し、追加するときにviewのlayoutparamsのtypeをLayoutParamsに設定する実現方法を発見した.TYPE_SYSTEM_ERROR、この値sdkの解釈は
そのまま使うと誤報になりますAndroid Manifestで.xmlに権限,ok上の完全なコードを追加し,ロックとhideメソッドがロックスクリーンとロック解除を実現するクラスをカプセル化した.
public void onAttachedToWindow()
{
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}
しかし、この方法は4.0のシステムでは失効し、homeでデスクトップに戻ります.Apktoolはいくつかのスクリーンロックソフトウェアを発見した後、WindowManagerのaddviewメソッドでウィンドウにviewを追加し、追加するときにviewのlayoutparamsのtypeをLayoutParamsに設定する実現方法を発見した.TYPE_SYSTEM_ERROR、この値sdkの解釈は
public static final int TYPE_SYSTEM_ERROR
Since: API Level 1
Window type: internal system error windows, appear on top of everything they can.
そのまま使うと誤報になりますAndroid Manifestで.xmlに権限
public class LockLayer {
private Activity mActivty;
private WindowManager mWindowManager;
private View mLockView;
private LayoutParams mLockViewLayoutParams;
public LockLayer(Activity act) {
mActivty = act;
init();
}
private void init(){
mWindowManager = mActivty.getWindowManager();
mLockViewLayoutParams = new LayoutParams();
mLockViewLayoutParams.width = LayoutParams.MATCH_PARENT;
mLockViewLayoutParams.height = LayoutParams.MATCH_PARENT;
//
mLockViewLayoutParams.type = LayoutParams.TYPE_SYSTEM_ERROR;
//apktool value,
mLockViewLayoutParams.flags = 1280;
}
public void lock() {
if(mLockView!=null){
mWindowManager.addView(mLockView, mLockViewLayoutParams);
}
}
public void unlock() {
if(mWindowManager!=null){
mWindowManager.removeView(mLockView);
}
}
public void setLockView(View v){
mLockView = v;
}
}