虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > Android编程 > Android自定义View展示Wifi信号强弱指示方法示例

Android自定义View展示Wifi信号强弱指示方法示例
类别:Android编程   作者:码皇   来源:互联网   点击:

这篇文章主要给大家介绍了关于Android自定义View展示Wifi信号强弱指示的相关资料,文中通过示例代码介绍的非常详细,文末给出了完整的实例供大家参考学习,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。

前言

最近因为工作的需要,要自定义展示Wifi信号强弱的需要,就通过利用系统广播的方式实现了一个自定义View——WifiStateView,下面话不多说了,感兴趣的朋友们一起来看看详细的介绍吧。

实现的效果图如下所示:

用不同的图片来表示Wifi信号的强弱,可以自定义Wifi信号等级

图标简陋了点,根据需要来替换即可

    /** * 作者: 叶应是叶 * 时间: 2017/8/22 18:25 * 描述: */public class WifiStateView extends AppCompatImageView {
    private WifiManager wifiManager;
    private WifiHandler wifiHandler;
    //没有开启Wifi或开启了Wifi但没有连接 private static final int LEVEL_NONE = 0;
    //Wifi信号等级(最弱) private static final int LEVEL_1 = 1;
    //Wifi信号等级 private static final int LEVEL_2 = 2;
    //Wifi信号等级 private static final int LEVEL_3 = 3;
    //Wifi信号等级(最强) private static final int LEVEL_4 = 4;
    private final String TAG = "WifiStateView";
    private static class WifiHandler extends Handler {
    //虚引用 private WeakReference<WifiStateView> stateViewWeakReference;
    WifiHandler(WifiStateView wifiStateView) {
    stateViewWeakReference = new WeakReference<>(wifiStateView);
    }
    @Override public void handleMessage(Message msg) {
    WifiStateView wifiStateView = stateViewWeakReference.get();
    if (wifiStateView == null) {
    return;
    }
    switch (msg.what) {
    case LEVEL_1: wifiStateView.setImageResource(R.drawable.wifi_1);
    break;
    case LEVEL_2: wifiStateView.setImageResource(R.drawable.wifi_2);
    break;
    case LEVEL_3: wifiStateView.setImageResource(R.drawable.wifi_3);
    break;
    case LEVEL_4: wifiStateView.setImageResource(R.drawable.wifi_4);
    break;
    case LEVEL_NONE: default: wifiStateView.setImageResource(R.drawable.wifi_none);
    break;
    }
    }
    }
    private BroadcastReceiver wifiStateReceiver = new BroadcastReceiver() {
    @Override public void onReceive(Context context, Intent intent) {
    Log.e(TAG, "action " + intent.getAction());
    switch (intent.getAction()) {
    case WifiManager.WIFI_STATE_CHANGED_ACTION: if (wifiManager.getWifiState() == WifiManager.WIFI_STATE_DISABLING) {
    wifiHandler.sendEmptyMessage(LEVEL_NONE);
    }
    break;
    case WifiManager.RSSI_CHANGED_ACTION: if (wifiManager.getWifiState() == WifiManager.WIFI_STATE_DISABLED) {
    wifiHandler.sendEmptyMessage(LEVEL_NONE);
    return;
    }
    WifiInfo wifiInfo = wifiManager.getConnectionInfo();
    int level = WifiManager.calculateSignalLevel(wifiInfo.getRssi(), 5);
    Log.e(TAG, "level:" + level);
    wifiHandler.sendEmptyMessage(level);
    break;
    }
    }
    }
    ;
    public WifiStateView(Context context) {
    this(context, null);
    }
    public WifiStateView(Context context, @Nullable AttributeSet attrs) {
    this(context, attrs, 0);
    }
    public WifiStateView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    wifiHandler = new WifiHandler(this);
    }
    @Override protected void onAttachedToWindow() {
    super.onAttachedToWindow();
    IntentFilter intentFilter = new IntentFilter();
    //Wifi连接状态变化 intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
    //Wifi信号强度变化 intentFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);
    getContext().registerReceiver(wifiStateReceiver, intentFilter);
    }
    @Override protected void onDetachedFromWindow() {
    super.onDetachedFromWindow();
    wifiHandler.removeCallbacksAndMessages(null);
    getContext().unregisterReceiver(wifiStateReceiver);
    }
    }

这里提供代码下载:

github地址:https://github.com/leavesC/WifiStateView

本地下载:http://xiazai.jb51.net/201708/yuanma/WifiStateView(jb51.net).rar

总结

以上就是这篇文章的全部内容了,希望本文的内容对各位Android开发者们的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关热词搜索: android 自定义view android wifi信号强度