BackキーとHomeキーのシールド
FBI Warning:転載歓迎ですが、出典を明記してください。http://blog.csdn.net/codezjx/article/details/45485975本人の同意なしに商業用途に使用しないでください。ありがとうございます。
(1)リターンキーをブロックする: OnBackPresedを書き換えるだけでいいです。超種類の方法は使いません。
1、従来の方法は以下の通りです。(ただし、Android 4.0以上では無効になります。)
WindowManagerのaddviewでウィンドウにviewを追加し、加えた時にviewのlayoutparamasのtypeをLayoutParamas.TYPEに設定します。SYSTEM_ERROR
権限を加えて android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
原理:WindowManagerを使ってスクリーンの一番前に1階のviewを加えて、そのtypeにLayoutParames.TYPE_を設定させます。SYSTEM_ERROR、公式はそれに対して説明します: インターナショナル system error windows appar オン トップ 保存先 everthing they canは、いかなる界面にも表示されている。そしてflagsを設定します LayoutParaams.FLAG_NOT_タッチイベントを傍受することができます。そして、addのviewを設定することができます。空のviewです。前に何かがあると感じません。Homeキーを遮断する効果があります。
参照コード:
3、Homeのシールドについて、もう一つの考えがあります。
傍受プログラムはフロントに表示されていますか?しかし、Androidはすでにこのホールを思い付いています。ホームボタンをクリックしたら、システムのLauncherは5秒の遅延保護があります。Activityを起動したり、フロントに移動する方法は全部で5秒遅れます。具体的にstackoverflowの解答を見て、この制限を解くには、システム権限「android.permission.STOPuSwith CHES」に加入する必要があります。
http://stackoverflow.com/questions/5600084/starting-an-activity-from-a-service-after-home-button-pressed-without-the-5-seco
つまり、システムの権限がないと、自分で第三者のLauncherを書くだけで解読できます。この方法は自分で測ってみます。
(1)リターンキーをブロックする: OnBackPresedを書き換えるだけでいいです。超種類の方法は使いません。
@Override
public void onBackPressed() {
// super.onBackPressed();
}
(2)Homeキーをブロックする:1、従来の方法は以下の通りです。(ただし、Android 4.0以上では無効になります。)
@Override
public void onAttachedToWindow(){
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}
権限を追加:<uses-permission android:name=”android.permission.DISABLE_KEYGUARD”></uses-permission>
2、Android 4.0以上の遮蔽方法:(より猥雑であるが、Android d 4.4以上で失効する)WindowManagerのaddviewでウィンドウにviewを追加し、加えた時にviewのlayoutparamasのtypeをLayoutParamas.TYPEに設定します。SYSTEM_ERROR
権限を加えて
原理:WindowManagerを使ってスクリーンの一番前に1階のviewを加えて、そのtypeにLayoutParames.TYPE_を設定させます。SYSTEM_ERROR、公式はそれに対して説明します: インターナショナル system error windows appar オン トップ 保存先 everthing they canは、いかなる界面にも表示されている。そしてflagsを設定します LayoutParaams.FLAG_NOT_タッチイベントを傍受することができます。そして、addのviewを設定することができます。空のviewです。前に何かがあると感じません。Homeキーを遮断する効果があります。
参照コード:
private void forbiddenHomeKey(){
mWindowManager = this.getWindowManager();
mWindowManagerParams = new LayoutParams();
mWindowManagerParams.width = LayoutParams.WRAP_CONTENT;
mWindowManagerParams.height = LayoutParams.WRAP_CONTENT;
// internal system error windows, appear on top of everything they can
mWindowManagerParams.type = LayoutParams.TYPE_SYSTEM_ERROR;
// indicate this view don’t respond the touch event
mWindowManagerParams.flags = LayoutParams.FLAG_NOT_TOUCHABLE;
// add an empty view on the top of the window
mEmptyView = new View(this);
mWindowManager.addView(mEmptyView, mWindowManagerParams);
}
なぜこのタイプを設定したらホームをブロックできますか?Phone WindowManager.javaのinterceptKeyBeforeDisplatingを見てもいいです。final int typeCount = WINDOW_TYPES_WHERE_HOME_DOESNT_WORK.length;
for (int i=0; i<typeCount; i++) {
if (type == WINDOW_TYPES_WHERE_HOME_DOESNT_WORK[i]) {
// don't do anything, but also don't pass it to the app
return -1;
}
}
WINDOW_TYPE.WHERE_HOMEDOESNT_WORK定数の値は、private static final int[] WINDOW_TYPES_WHERE_HOME_DOESNT_WORK = {
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
};
タイプは上の二つの一つに設定すればいいです。3、Homeのシールドについて、もう一つの考えがあります。
傍受プログラムはフロントに表示されていますか?しかし、Androidはすでにこのホールを思い付いています。ホームボタンをクリックしたら、システムのLauncherは5秒の遅延保護があります。Activityを起動したり、フロントに移動する方法は全部で5秒遅れます。具体的にstackoverflowの解答を見て、この制限を解くには、システム権限「android.permission.STOPuSwith CHES」に加入する必要があります。
http://stackoverflow.com/questions/5600084/starting-an-activity-from-a-service-after-home-button-pressed-without-the-5-seco
つまり、システムの権限がないと、自分で第三者のLauncherを書くだけで解読できます。この方法は自分で測ってみます。