android 开发屏蔽home键,返回键

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");
        }
    }
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android中,我们可以通过重写Activity的onBackPressed()方法屏蔽返回的功能,代码如下: ``` @Override public void onBackPressed() { // 屏蔽返回 // super.onBackPressed(); // 如果需要默认的返回功能,需要注释掉这行代码 } ``` 对于HOME屏蔽,由于Android系统限制,我们无法屏蔽HOME的功能。但是我们可以监听HOME的按下事件,并在按下事件发生时做一些特定的操作,例如弹出对话框或者跳转到其他页面。代码如下: ``` private static final String SYSTEM_DIALOG_REASON_KEY = "reason"; private static final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey"; @Override public void onAttachedToWindow() { super.onAttachedToWindow(); // 监听HOME getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_HOME) { // HOME按下事件 return true; } return super.onKeyDown(keyCode, event); } @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (!hasFocus) { // 如果Activity失去了焦点,则判断是否是HOME按下事件 Intent closeDialog = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); sendBroadcast(closeDialog); } } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); // 判断是否是HOME按下事件 String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY); if (SYSTEM_DIALOG_REASON_HOME_KEY.equals(reason)) { // HOME按下事件 } } ``` 需要注意的是,由于Android系统限制,无法屏蔽HOME的功能,因此以上代码只能监听HOME的按下事件,并在按下事件发生时做一些特定的操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值