Android實現廣播監聽HOME鍵操作

fydxdk 9年前發布 | 3K 次閱讀 Java Android

先寫了個Service,在服務中通過廣播來監聽HOME鍵操作:

public class HomeService extends Service{ private MonitoHomeReceiver mHomeBroadcastReceiver; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); mHomeBroadcastReceiver = new MonitoHomeReceiver(); /**

  • Android對屏幕下方常用按鍵消息處理是不一致的:
  • 1、搜索按鍵的消息在onKeyDown或者onKeyUp中接收;
  • 2、菜單按鍵的消息在onCreateOptionsMenu、onKeyDown或onKeyUp方法中接收;
  • 3、返回按鍵的消息可以在onBackPressed、onKeyDown或onKeyUp方法中接收。
  • 對于Home按鍵消息的處理,既不能通過onKeyDown、onKeyUp接收到,android也沒有提供專有的方法接收按鍵消息
  • 但辦法總是有的,點擊Home按鍵時都會發出一個action為Intent.ACTION_CLOSE_SYSTEM_DIALOGS的廣播,通過注冊它來監聽Home按鍵消息 */ IntentFilter homeFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); registerReceiver(mHomeBroadcastReceiver, homeFilter); } public class MonitoHomeReceiver extends BroadcastReceiver{ final String HOME_DIALOG_REASON = "homereason"; final String HOME_DIALOG_REASON_HOME = "homekey";

@Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) { String reason = intent.getStringExtra(HOME_DIALOG_REASON); if (reason != null && reason.equals(HOME_DIALOG_REASON_HOME)) { Toast.makeText(getApplicationContext(), "點擊Home鍵", Toast.LENGTH_SHORT).show(); return; } } }

}

@Override public void onDestroy() { unregisterReceiver(mHomeBroadcastReceiver); mHomeBroadcastReceiver = null; super.onDestroy(); } }

然后在Activity中啟動Service:

public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /*按鈕點擊事件/ findViewById(R.id.test_home_btn).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this,HomeService.class); startService(intent); } }); } }

最后就是個簡單的布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&quot; xmlns:tools="http://schemas.android.com/tools&quot; android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >

<Button
    android:id="@+id/test_home_btn"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="測試Home鍵" />

</LinearLayout>

最后不要忘記在AndroidManifest.xml中用<Service></Service>標簽注冊HomeService 服務。 </pre>

 本文由用戶 fydxdk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!