Android中屏蔽"電源鍵長按"、"Home鍵"、"Home鍵長按"

ngww 9年前發布 | 2K 次閱讀 Java Android

這幾個“按鍵”的觸發,都會產生一個 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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!