国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android自定義View展示Wifi信號強弱指示方法示例

2019-12-12 02:11:42
字體:
來源:轉載
供稿:網友

前言

最近因為工作的需要,要自定義展示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.VeVB.COm/201708/yuanma/WifiStateView(VeVB.COm).rar

總結

以上就是這篇文章的全部內容了,希望本文的內容對各位Android開發者們的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 古浪县| 壶关县| 静海县| 建平县| 儋州市| 玛曲县| 忻城县| 湘潭市| 稻城县| 齐齐哈尔市| 松桃| 舒城县| 上犹县| 田阳县| 江口县| 万全县| 华蓥市| 五莲县| 沙河市| 石门县| 故城县| 沙洋县| 平利县| 马关县| 根河市| 巴青县| 平山县| 昌图县| 丹阳市| 西乡县| 北宁市| 上高县| 阿勒泰市| 克山县| 澎湖县| 泗洪县| 南部县| 湟源县| 报价| 彰化市| 行唐县|