zoukankan      html  css  js  c++  java
  • Android利用广播监听按下HOME和电源键

    package cc.testhome;
     
    import cc.testhome.HomeKeyObserver.OnHomeKeyListener;
    import cc.testhome.PowerKeyObserver.OnPowerKeyListener;
    import android.os.Bundle;
    import android.app.Activity;
    /**
     * Demo描述:
     * 利用广播监听Home键的按下和长按Home键
     * 利用广播监听电源键的按下(关闭屏幕)
     * 
     * 参考资料:
     * 1 http://blog.csdn.net/q445697127/article/details/8432513
     * 2 http://blog.csdn.net/watt520/article/details/18959897
     * 3 http://blog.csdn.net/lfdfhl/article/details/9903693
     *   Thank you very much
     */
    public class MainActivity extends Activity {
        private HomeKeyObserver mHomeKeyObserver;
        private PowerKeyObserver mPowerKeyObserver;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            init();
        }
         
        private void init() {
            mHomeKeyObserver = new HomeKeyObserver(this);
            mHomeKeyObserver.setHomeKeyListener(new OnHomeKeyListener() {
                @Override
                public void onHomeKeyPressed() {
                    System.out.println("----> 按下Home键");
                }
     
                @Override
                public void onHomeKeyLongPressed() {
                    System.out.println("----> 长按Home键");
                }
            });
            mHomeKeyObserver.startListen();
      
            //////////////////////////////////////////
             
            mPowerKeyObserver = new PowerKeyObserver(this);
            mPowerKeyObserver.setHomeKeyListener(new OnPowerKeyListener() {
                @Override
                public void onPowerKeyPressed() {
                   System.out.println("----> 按下电源键");
                }
            });
            mPowerKeyObserver.startListen();
        }
     
        @Override
        protected void onDestroy() {
            super.onDestroy();
            mHomeKeyObserver.stopListen();
              
            //////////////////////////////////////////
             
            mPowerKeyObserver.stopListen();
        }
     
    }
    package cc.testhome;
     
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
     
    public class HomeKeyObserver {
        private Context mContext;
        private IntentFilter mIntentFilter;
        private OnHomeKeyListener mOnHomeKeyListener;
        private HomeKeyBroadcastReceiver mHomeKeyBroadcastReceiver;
        public HomeKeyObserver(Context context) {
            this.mContext = context;
        }
         
        //注册广播接收者
        public void startListen(){
            mIntentFilter=new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
            mHomeKeyBroadcastReceiver=new HomeKeyBroadcastReceiver();
            mContext.registerReceiver(mHomeKeyBroadcastReceiver, mIntentFilter);
            System.out.println("----> 开始监听");
        }
         
        //取消广播接收者
        public void stopListen(){
            if (mHomeKeyBroadcastReceiver!=null) {
                mContext.unregisterReceiver(mHomeKeyBroadcastReceiver);
                System.out.println("----> 停止监听");
            }
        }
         
        // 对外暴露接口
        public void setHomeKeyListener(OnHomeKeyListener homeKeyListener) {
            mOnHomeKeyListener = homeKeyListener;
        }
     
        // 回调接口
        public interface OnHomeKeyListener {
            public void onHomeKeyPressed();
            public void onHomeKeyLongPressed();
        }
     
        //广播接收者
        class HomeKeyBroadcastReceiver extends BroadcastReceiver{
            final String SYSTEM_DIALOG_REASON_KEY = "reason";
            //按下Home键
            final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
            //长按Home键
            final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
                    String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
                    if (reason != null && mOnHomeKeyListener != null) {
                        if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {
                            mOnHomeKeyListener.onHomeKeyPressed();
                        } else if (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
                            mOnHomeKeyListener.onHomeKeyLongPressed();
                        }
                    }
                }
            }
        }
          
    }
    package cc.testhome;
     
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
     
    public class PowerKeyObserver {
        private Context mContext;
        private IntentFilter mIntentFilter;
        private OnPowerKeyListener mOnPowerKeyListener;
        private PowerKeyBroadcastReceiver mPowerKeyBroadcastReceiver;
        public PowerKeyObserver(Context context) {
            this.mContext = context;
        }
         
        //注册广播接收者
        public void startListen(){
            mIntentFilter=new IntentFilter(Intent.ACTION_SCREEN_OFF);
            mPowerKeyBroadcastReceiver=new PowerKeyBroadcastReceiver();
            mContext.registerReceiver(mPowerKeyBroadcastReceiver, mIntentFilter);
            System.out.println("----> 开始监听");
        }
         
        //取消广播接收者
        public void stopListen(){
            if (mPowerKeyBroadcastReceiver!=null) {
                mContext.unregisterReceiver(mPowerKeyBroadcastReceiver);
                System.out.println("----> 停止监听");
            }
        }
         
        // 对外暴露接口
        public void setHomeKeyListener(OnPowerKeyListener powerKeyListener) {
            mOnPowerKeyListener = powerKeyListener;
        }
     
        // 回调接口
        public interface OnPowerKeyListener {
            public void onPowerKeyPressed();
        }
     
        //广播接收者
        class PowerKeyBroadcastReceiver extends BroadcastReceiver{
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                if (action.equals(Intent.ACTION_SCREEN_OFF)) {
                    mOnPowerKeyListener.onPowerKeyPressed();
                }
            }
        }
          
    }
    <relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent">
    
    <!--  main.xml-->
     
        <textview android:layout_centerinparent="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="利用广播监听Home键和电源键">
     
    </textview></relativelayout>
  • 相关阅读:
    【Android
    【Android
    GeoIP的使用
    从30岁到35岁:为你的生命多积累一些厚度[转]
    editplus运行php 配置
    zend studio10 创建重复project from remote server
    《淘宝技术这10年》
    顶级程序员的10条最佳实践
    PHP_EOL 换行符
    尝试用Gearman实现分布式处理(PHP)[转]
  • 原文地址:https://www.cnblogs.com/flyingsir/p/4057454.html
Copyright © 2011-2022 走看看