Androidはホームキーのキャプチャとスクリーンを実現します。


原文のリンク:http://my.eoe.cn/viver120/archive/4276.html
一、ホームキーの掴み取り
  • Android 4.0バージョン以下の場合、処理:
  • 1.1.Android Manifest.xmlに権限を加え、HOMEキーを禁止する。
    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(); }
  • Android 4.0以上のバージョン:
  • システムログをキャプチャします。私達が注意深く観察すれば、ホームキーを押すと、Logcatは以下の情報を出力します。
    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"/>
  • は、logcat情報を取得する。スレッドモニタを起動し、スレッドの起動をconcrete()にすることを推奨します。
  • 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以上のバージョンはホームボタンをシールドする便利な方法があります。
  • 静的定数を定義する:public static final int FLAG_HOMEKEYDISPATCHED=0 x 800万;
  • .oncreate()のset ContentViewの前にコードを書きます。this.get Window().set Flags(FLAG HomeKEYuDISPATCHED、FLAG HomekeYu DISPATED);
  • でワンキーイベントを書き直します。
  • 例は以下の通りです
    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); ......... }