搜索一个下午无果,貌似实现不了屏蔽,查看源码PhoneWindowManager类,看了看拦截Home部分,照着写了deme验证,提示 信息类似于permission denied for this window type, 想修改源码编译验证,可惜手里没有4.0源码,验证结果如何也不清楚。。。
在写的时候犯了个小错,LayoutParams分别是两个类的内部类,WindowManager.LayoutParams和ViewGroup.LayoutParams,要分清楚是用哪个类,在配置文件添加权限 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
<uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW"/>
但是毫无反应,基本代码就几行测试代码,见下
import android.R.attr;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.widget.Button;
public class TestHomeActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
//getWindow().clearFlags(WindowManager.LayoutParams.FLAG_HOMEKEY_DISPATCHED);
WindowManager wm = TestHomeActivity.this.getWindowManager();
//WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG
WindowManager.LayoutParams lp = new LayoutParams(WindowManager.LayoutParams.TYPE_KEYGUARD, WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
wm.addView(new Button(TestHomeActivity.this), lp);
}
@Override
public void onAttachedToWindow() {
// this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
return true; //super.onKeyDown(keyCode, event)
}
}
对此代码,拦截Home没有效果。
另,关于使用windowmanager盖view的方法我清楚,不符合屏蔽Home按键初衷,肯定不能采纳,把activity作为launcher也不可取,因为不够灵活,而且本身有缺陷:用户可以清除设置,返回默认launcher。
如果谁有思路,可以交流,谢谢。