现在的位置: 首页 > 综合 > 正文

android 4.0 拦截Home

2013年07月14日 ⁄ 综合 ⁄ 共 1913字 ⁄ 字号 评论关闭

搜索一个下午无果,貌似实现不了屏蔽,查看源码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。

如果谁有思路,可以交流,谢谢。

抱歉!评论已关闭.