Android监听个人热点(Hotspot)打开关闭状态

Android监听个人热点(Hotspot)打开关闭状态

package com.android.systemui.statusbar.policy;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.WifiManager;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import android.util.Log;
import java.lang.ref.WeakReference;

public class HotspotTile extends ImageView {
    final String TAG = getClass().getSimpleName() + "_";
    private Context mContext;
    private H mHandler;
    private boolean mRegistered;

    private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {

            if (WifiManager.WIFI_AP_STATE_CHANGED_ACTION.equals(intent.getAction())) {
                int state = intent.getIntExtra(WifiManager.EXTRA_WIFI_AP_STATE,  0); // "wifi_state"
                Log.d(TAG, "onReceive:" + intent.getAction() + ",state:" + state);
                if (state == WifiManager.WIFI_AP_STATE_ENABLED) { // 13
                    show(true); // 热点已关闭
                } else if (state == WifiManager.WIFI_AP_STATE_DISABLED) { // 11
                    show(false); // 热点已打开
                } else if (state == WifiManager.WIFI_AP_STATE_DISABLING) { // 10
                    // 热点正在关闭...
                } else if (state == WifiManager.WIFI_AP_STATE_ENABLING) { // 12
                    // 热点正在打开...
                } else if (state == WifiManager.WIFI_AP_STATE_FAILED) { // 14
                    // 热点操作失败... 硬件不支持或者其他问题
                }
            }
        }
    };

    public HotspotTile(Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;
        init();
    }

    public HotspotTile(Context context) {
        super(context);
        mContext = context;
        init();
    }

    private void init() {
        mHandler = new H(this);
    }

    private void register() {
        if (!mRegistered) {
            mRegistered= true;
            IntentFilter filter = new IntentFilter();
            filter.addAction(WifiManager.WIFI_AP_STATE_CHANGED_ACTION); // "android.net.wifi.WIFI_AP_STATE_CHANGED"
            mContext.registerReceiver(mBroadcastReceiver, filter);
        }
    }

    private void unRegister() {
        if (mRegistered) {
            mRegistered= false;
            mContext.unregisterReceiver(mBroadcastReceiver);
        }
        mHandler.removeCallbacksAndMessages(null);
    }

    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        register();
    }

    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        unRegister();
    }

    private void show(boolean show) {
        mHandler.obtainMessage(H.MSG_UPDATE, show).sendToTarget();
    }

    private void showH(boolean show) {
        setVisibility(show ? View.VISIBLE : View.GONE);
    }

    public static class H extends Handler {
        public final static int MSG_UPDATE = 1;
        private WeakReference<HotspotTile> mReference;

        public H(HotspotTile var) {
            mReference = new WeakReference<>(var);
        }

        @Override
        public void handleMessage(Message msg) {
            HotspotTile obj = mReference.get();
            switch (msg.what) {
                case MSG_UPDATE:
                    if (mReference.get() != null) {
                        mReference.get().showH((Boolean) msg.obj);
                    }
                    break;
                default:
                    break;
            }
            super.handleMessage(msg);
        }
    }

}

posted @ 2022-03-12 22:04  xiaomodecnblogs  阅读(299)  评论(0)    收藏  举报