Android中屏蔽"電源鍵長按"、"Home鍵"、"Home鍵長按"
這幾個“按鍵”的觸發,都會產生一個 Action == Intent.ACTION_CLOSE_SYSTEM_DIALOGS 的通知區分他們三個的不同事件的參數,就是隨著 Intent 帶過來的 reason 字符串,分別對應:
"電源鍵長按"(globalscreen)
"Home鍵"(homekey)
"Home鍵長按"(recentapps)
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;public class MainActivity extends Activity {
private MyBroadCastReceiver myBroadCastReceiver; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); myBroadCastReceiver = new MyBroadCastReceiver(); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); System.out.println("I'm coming, myBroadCastReceiver注冊了!"); registerReceiver(myBroadCastReceiver, intentFilter); } private class MyBroadCastReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { //你自己先把 reasons == homekey 和 長按homekey 排除,剩下的做下面的處理 String reason = intent.getStringExtra("reason"); if (intent.getAction().equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)){ System.out.println("Intent.ACTION_CLOSE_SYSTEM_DIALOGS : " + intent.getStringExtra("reason")); if (intent.getExtras()!=null && intent.getExtras().getBoolean("myReason")){ myBroadCastReceiver.abortBroadcast(); }else if (reason != null){ if (reason.equalsIgnoreCase("globalactions")){ //屏蔽電源長按鍵的方法: Intent myIntent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); myIntent.putExtra("myReason", true); context.sendOrderedBroadcast(myIntent, null); System.out.println("電源 鍵被長按"); }else if (reason.equalsIgnoreCase("homekey")){ //屏蔽Home鍵的方法 //在這里做一些你自己想要的操作,比如重新打開自己的鎖屏程序界面,這樣子就不會消失了 System.out.println("Home 鍵被觸發"); }else if (reason.equalsIgnoreCase("recentapps")){ //屏蔽Home鍵長按的方法 System.out.println("Home 鍵被長按"); } } } } } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); System.out.println("I get out, myBroadCastReceiver注銷了!"); unregisterReceiver(myBroadCastReceiver); }
} </pre>
本文由用戶 ngww 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!