Androidはホームキーのキャプチャとスクリーンを実現します。
7744 ワード
原文のリンク:http://my.eoe.cn/viver120/archive/4276.html
一、ホームキーの掴み取り Android 4.0バージョン以下の場合、処理: 1.1.Android Manifest.xmlに権限を加え、HOMEキーを禁止する。 Android 4.0以上のバージョン: システムログをキャプチャします。私達が注意深く観察すれば、ホームキーを押すと、Logcatは以下の情報を出力します。追加権限: は、logcat情報を取得する。スレッドモニタを起動し、スレッドの起動をconcrete()にすることを推奨します。 静的定数を定義する:public static final int FLAG_HOMEKEYDISPATCHED=0 x 800万; .oncreate()のset ContentViewの前にコードを書きます。this.get Window().set Flags(FLAG HomeKEYuDISPATCHED、FLAG HomekeYu DISPATED); でワンキーイベントを書き直します。 例は以下の通りです
一、ホームキーの掴み取り
1
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
1.2以下の2つの方法を積載する。1
2
3
4
5
6
7
8
9
10
11
12
13
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(KeyEvent.KEYCODE_HOME==keyCode){ // doSomething(); } return super.onKeyDown(keyCode, event); } @Override public void onAttachedToWindow(){ this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); }
1
I/ActivityManager( 144): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=com.android.launcher/com.android.launcher2.Launcher } from pid 144
そうすると、私たちはロゴカードの情報をキャッチするだけで、ホームキーを傍受することができます。1
<uses-permission android:name="android.permission.READ_LOGS"/>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// HOME , 。 public void listenerHome() { new Thread(new Runnable() { public void run() { Process mLogcatProc = null; BufferedReader reader = null; try { /* logcat * logcat: logcat * ActivityManager Tag ActivityManager * I:<span style="font-size:16px;">logcat :(V</span> :Verbose<span style="font-size:16px;"> D </span>:Debug<span style="font-size:16px;"> I</span> :Info<span style="font-size:16px;"> W</span> :Warning<span style="font-size:16px;"> E</span> :Error<span style="font-size:16px;"> * F</span> :Fatal<span style="font-size:16px;"> S</span> :Silent) I Info。 * *:S: */ mLogcatProc = Runtime.getRuntime().exec( new String[] { "logcat", "ActivityManager:I *:S" }); reader = new BufferedReader(new InputStreamReader( mLogcatProc.getInputStream())); String line; while ((line = reader.readLine()) != null) { if (line.indexOf("android.intent.category.HOME") > 0) { Looper.prepare(); //bgmusic_playler.stop(); // HOME message, handler 。 handler.sendMessage(handler.obtainMessage()); Runtime.getRuntime().exec("logcat -c"); Looper.loop(); break; } } } catch (Exception e) { e.printStackTrace(); } } }).start(); }
二、ホームキーのシールドand roid 4.0以上のバージョンはホームボタンをシールドする便利な方法があります。1
2
3
4
5
6
7
8
public static final int FLAG_HOMEKEY_DISPATCHED = 0x80000000; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED,FLAG_HOMEKEY_DISPATCHED); this.setContentView(R.layout.keys_test_layout); ......... }