android 開發遮蔽home鍵,返回鍵
阿新 • • 發佈:2019-02-16
Android TV遮蔽返回鍵
重寫OnkeyDown方法
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(KeyEvent.KEYCODE_BACK==keyCode){ return false; } return super.onKeyDown(keyCode, event); }
home鍵比較特殊,是受系統保護的,無法通過常規手段遮蔽,找到一個靠譜的方法是,通過工具類監聽到home鍵的廣播,然後做處理,不過效果還不是很理想
一,建立工具類
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; /*** Home按鍵監聽類 * 使用說明: * 1、初始化HomeListen * HomeListen homeListen = new HomeListen( this ); * homeListen.setOnHomeBtnPressListener( new setOnHomeBtnPressListener(){ * @Override * public void onHomeBtnPress( ){ * // 按下Home按鍵回撥 * } * * @Override * public void onHomeBtnLongPress( ){* // 長按Home按鍵回撥 * } * }); * * 2、在onResume方法中啟動HomeListen廣播: * homeListen.start(); * * 3、在onPause方法中停止HomeListen廣播: * homeListen.stop( ); * */ public class HomeListen { public HomeListen(Context context) { mContext = context; mHomeBtnReceiver = new HomeBtnReceiver( ); mHomeBtnIntentFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); } public void setOnHomeBtnPressListener( OnHomeBtnPressLitener onHomeBtnPressListener ){ mOnHomeBtnPressListener = onHomeBtnPressListener; } public void start( ){ mContext.registerReceiver( mHomeBtnReceiver, mHomeBtnIntentFilter ); } public void stop( ){ mContext.unregisterReceiver( mHomeBtnReceiver ); } class HomeBtnReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { receive( context, intent ); } } private void receive(Context context, Intent intent){ String action = intent.getAction(); if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) { String reason = intent.getStringExtra( "reason" ); if (reason != null) { if( null != mOnHomeBtnPressListener ){ if( reason.equals( "homekey" ) ){ // 按Home按鍵 mOnHomeBtnPressListener.onHomeBtnPress( ); }else if( reason.equals( "recentapps" ) ){ // 長按Home按鍵 mOnHomeBtnPressListener.onHomeBtnLongPress( ); } } } } } public interface OnHomeBtnPressLitener{ public void onHomeBtnPress( ); public void onHomeBtnLongPress( ); } private Context mContext = null; private IntentFilter mHomeBtnIntentFilter = null; private OnHomeBtnPressLitener mOnHomeBtnPressListener = null; private HomeBtnReceiver mHomeBtnReceiver = null; }
二、在activity呼叫
public class HomeListenActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home_listen_layout); initHomeListen( ); }
@Override protected void onResume( ) { super.onResume(); mHomeListen.start( ); } @Override protected void onPause() { super.onPause(); mHomeListen.stop( ); } private void initHomeListen( ){ mHomeListen = new HomeListen( this ); mHomeListen.setOnHomeBtnPressListener( new HomeListen.OnHomeBtnPressLitener( ) { @Override public void onHomeBtnPress() { Log.e("-----home鍵出現了----","-----home鍵出現了----"); startSelfFromPendingIntent(); } @Override public void onHomeBtnLongPress() { Log.e("-----home鍵出現了----","-----home鍵出現了----"); startSelfFromPendingIntent(); } }); } private void showToast( String toastInfoStr ){ Toast.makeText( this, toastInfoStr, Toast.LENGTH_LONG ).show( ); } private HomeListen mHomeListen = null; private void startSelfFromPendingIntent() { Intent intent = new Intent(); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.setComponent(new ComponentName(MainActivity.this, MainActivity.class)); PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0); try { pendingIntent.send(); } catch (Exception e) { Log.e("", "stayTop fail"); } }