一、网络状态
Android市场的逐渐降温及形成稳定,其实说明了Android的发展走向稳重成熟的阶段。
除却最开始的功能实现,到如今的用户体验至上,Android研发面临的挑战却从未冷却。基于大多数APP均是以APP为数据展示框架,实现客户与服务器数据交互,网络扮演了十分重要的角色。
网络状态,除了WiFi,数据,网络不可用等,还有网络条件不好等情形。存有标志网络速度的则能较好地标示当前网络情形。
以下则实现监听网速,展示当前网速条件。借由给客户更好的用户体验。
二、实现监听网速
TrafficStats类提供了以下方法,关于统计网速:
/**
* static long getMobileRxBytes()//获取通过Mobile连接收到的字节总数,但不包含WiFi static long
* getMobileRxPackets()//获取Mobile连接收到的数据包总数 static long
* getMobileTxBytes()//Mobile发送的总字节数 static long
* getMobileTxPackets()//Mobile发送的总数据包数 static long
* getTotalRxBytes()//获取总的接受字节数,包含Mobile和WiFi等 static long
* getTotalRxPackets()//总的接受数据包数,包含Mobile和WiFi等 static long
* getTotalTxBytes()//总的发送字节数,包含Mobile和WiFi等 static long
* getTotalTxPackets()//发送的总数据包数,包含Mobile和WiFi等 static long
* getUidRxBytes(int uid)//获取某个网络UID的接受字节数 static long getUidTxBytes(int
* uid) //获取某个网络UID的发送字节数
*/
实现整体思路:
创建浮动窗口,用于展示网速状态;应用程序后台运行,浮动窗口依旧显示,则使用Service展示浮动窗口;在Activity中开启Service。
网速监听主体功能实现,TrafficBean.java:
package com.future.netobserverdemo.bean;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.net.TrafficStats;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Timer;
import java.util.TimerTask;
/**
* 功能:流量Bean属性信息
* 作者:vision
* 时间:2016/10/19
*/
public class TrafficBean implements Serializable {
/**
* static long getMobileRxBytes()//获取通过Mobile连接收到的字节总数,但不包含WiFi static long
* getMobileRxPackets()//获取Mobile连接收到的数据包总数 static long
* getMobileTxBytes()//Mobile发送的总字节数 static long
* getMobileTxPackets()//Mobile发送的总数据包数 static long
* getTotalRxBytes()//获取总的接受字节数,包含Mobile和WiFi等 static long
* getTotalRxPackets()//总的接受数据包数,包含Mobile和WiFi等 static long
* getTotalTxBytes()//总的发送字节数,包含Mobile和WiFi等 static long
* getTotalTxPackets()//发送的总数据包数,包含Mobile和WiFi等 static long
* getUidRxBytes(int uid)//获取某个网络UID的接受字节数 static long getUidTxBytes(int
* uid) //获取某个网络UID的发送字节数
*/
/**
* 不支持状态【标识变量】
*/
private static final int UNSUPPORT = -1;
/**
* 打印信息标志
*/
private static final String TAG = "TrafficBean";
/**
* 当前对象实例
*/
private static TrafficBean instance;
/**
* 当前应用的uid
*/
static int UUID;
/**
* 上一次记录网络字节流
*/
private long preRxBytes = 0;
/**
*
*/
private Timer mTimer = null;
/**
* 上下文对象
*/
private Context context;
/**
* 消息处理器
*/
private Handler handler;
/**
* 更新频率
*/
private final int UPDATE_FREQUENCY = 1;
private int times = 1;
/**
* 构造方法
*
* @param context
* @param handler
* @param uid
*/
public TrafficBean(Context context, Handler handler, int uid) {
this.context = context;
this.handler = handler;
this.UUID = uid;
}
public TrafficBean(Context context, Handler