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);
Log.d(TAG, "onReceive:" + intent.getAction() + ",state:" + state);
if (state == WifiManager.WIFI_AP_STATE_ENABLED) {
show(true);
} else if (state == WifiManager.WIFI_AP_STATE_DISABLED) {
show(false);
} else if (state == WifiManager.WIFI_AP_STATE_DISABLING) {
} else if (state == WifiManager.WIFI_AP_STATE_ENABLING) {
} else if (state == WifiManager.WIFI_AP_STATE_FAILED) {
}
}
}
};
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);
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);
}
}
}