前言

最近因为工作的需要,要自定义展示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 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);

}

}

这里提供代码下载:

总结

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

android信号强弱动画,Android自定义View展示Wifi信号强弱指示方法示例相关推荐

  1. Android 雪花飘落动画效果 自定义View

    在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天.每周,都会留下一些脚印,就是这些创作的内容,有一种执着,就是不知为什么,如果你迷茫,不 ...

  2. android录音波浪动画_Android自定义View实现波浪动画

    本文实例为大家分享了Android自定义View实现波浪动画的具体代码,供大家参考,具体内容如下 效果演示 代码调用与实现效果 xml中调用 android:layout_width="ma ...

  3. android录音波浪动画_Android 自定义 view 实现波浪动画进度条

    最近在做项目时需要实现这样一种动画,类似于波浪形的进度动画,粗略的看了一下,发现好像类似于正余弦曲线实现的,但是Android 没有相关的API,所以需要我们动手画出来,所以现在在此记录一下学习过程, ...

  4. Android自定义view摇杆,Android自定义View实现游戏摇杆键盘的方法示例

    前言 本文主要给大家介绍的是关于Android自定义View实现游戏摇杆键盘的相关内容,为什么会有这篇文章呢?因为在之前的一个项目,操作方向的方式为上下左右,左上需要同时按住左键和右键的方式进行操作. ...

  5. Android属性动画与自定义View——实现vivo x6更新系统的动画效果

    晚上好,现在是凌晨两点半,然后我还在写代码.电脑里播放着<凌晨两点半>,晚上写代码,脑子更清醒,思路更清晰. 今天聊聊属性动画和自定义View搭配使用,前面都讲到自定义View和属性动画, ...

  6. Android 气泡动画(自定义View类)

    Android 气泡动画(自定义View类) 一.前言 二.代码 1. 随机移动的气泡 2.热水气泡 一.前言 最近有需求制作一个水壶的气泡动画,首先在网上查找了一番,找到了一个文章. https:/ ...

  7. Android软件开发之盘点自定义View界面大合集(二)

    Android软件开发之盘点自定义View界面大合集(二) - 雨松MOMO的程序世界 - 51CTO技术博客 雨松MOMO带大家盘点Android 中的自定义View界面的绘制 今天我用自己写的一个 ...

  8. Carson带你学Android:源码解析自定义View Draw过程

    前言 自定义View是Android开发者必须了解的基础 网上有大量关于自定义View原理的文章,但存在一些问题:内容不全.思路不清晰.无源码分析.简单问题复杂化 等 今天,我将全面总结自定义View ...

  9. android+直播点赞,Android自定义View实现直播点赞特效的方法

    Android自定义View实现直播点赞特效的方法 发布时间:2020-07-30 09:24:13 来源:亿速云 阅读:77 作者:小猪 这篇文章主要讲解了Android自定义View实现直播点赞特 ...

最新文章

  1. 构建企业级业务高可用的延时消息中台
  2. explode php 报错,PHP函数explode和split的区别
  3. python 释放变量所指向的内存_通俗易懂的Python垃圾回收机制及内存管理
  4. linux 网卡是块设备吗,什么是网络块设备(Network Block Device)?
  5. 万事开头难!Python 初学者最容易犯的几个错误
  6. python怎么设置颜色深浅变化_Python赋值、深浅copy
  7. 最常问的MySQL面试题集合
  8. 法国 计算机金融 大学,捷报|GPA3.0,计算机转申金融,斩获法国顶级商学院录取!...
  9. Loadrunner11录制过程中报错:由于另一个程序正在运行中,此操作无法完成
  10. php pdo 显示二进制,php – 在MySQL PDO中显示警告
  11. 美发布《2025年的数学科学》报告
  12. 11.PHP-FPM pool
  13. libpcap中主要函数使用介绍
  14. js生成xlsx/xls格式文件并下载到本地
  15. Friendster,linkedin,orkut,liring对SNS的求索
  16. wiresshark抓包
  17. diamond运算符
  18. 基于SpringBoot 适合学习的开源社区平台
  19. Springboot redis多数据源过期监听案例
  20. signaltap采集数据到matlab,一种matlab调用signaltap采集数据的方法

热门文章

  1. L1-043 阅览室
  2. Win2008 R2安装.NET Framework 4的windows6.1-KB958488-V6001-x6
  3. 基于MiniFly魔改的共轴双旋翼无人机
  4. 实变函数论学习笔记(二)集合的势
  5. [第五届蓝桥杯省赛C++A/B组]蚂蚁感冒
  6. 关于 txt 格式文件默认 浏览器打开乱码
  7. 只需一部手机,新手做自媒体不想出镜拍视频,推荐这4个领域
  8. 导入技能要素三大类_【师出教育】试讲七大技能剖析带你突破面试
  9. idea中使dll文件,jar包生效
  10. java 取整取余_Java取整、取余