TrafficStats 流量统计类的范例,获取实时网速- http://www.mamicode.com/info-detail-225320.html
Android 获取当前网速- https://blog.csdn.net/a22422931/article/details/76155241
public class NetSpeedRate {
private static final String TAG = NetSpeedRate.class.getSimpleName();
private long lastTotalRxBytes = 0;
private long lastTimeStamp = 0;
public String getNetSpeed(int uid) {
long nowTotalRxBytes = getTotalRxBytes(uid);
long nowTimeStamp = System.currentTimeMillis();
long speed = ((nowTotalRxBytes - lastTotalRxBytes) * 1000 / (nowTimeStamp - lastTimeStamp));//毫秒转换
lastTimeStamp = nowTimeStamp;
lastTotalRxBytes = nowTotalRxBytes;
return String.valueOf(speed) + " kb/s";
}
//getApplicationInfo().uid
public long getTotalRxBytes(int uid) {
return TrafficStats.getUidRxBytes(uid) == TrafficStats.UNSUPPORTED ? 0 : (TrafficStats.getTotalRxBytes() / 1024);//转为KB
}
}
Android视频播放器缓冲时加载速度的显示- http://blog.sina.com.cn/s/blog_a25bbbb50101igic.html
Android视频播放器缓冲时流量显示的实现方式- https://blog.csdn.net/puhaibo_skynet/article/details/44198463
Android视频播放器缓冲时流量显示的实现方式- http://www.apkbus.com/android-123796-1-1.html
<!-- 圆形缓冲 loading转圈-->
<ProgressBar
android:id="@+id/app_video_loading"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_centerInParent="true"
android:indeterminate="false"
android:indeterminateBehavior="repeat"
android:indeterminateDrawable="@drawable/circle_progress"
android:indeterminateOnly="true"
android:visibility="visible" />
<!-- 显示下载速度 -->
<com.nayun.framework.colorUI.widget.ColorTextView
android:layout_marginLeft="3dp"
android:gravity="center"
android:textColor="#ffffff"
android:text="0 kb/s"
android:id="@+id/show_down_rate"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_centerInParent="true"
android:layout_toRightOf="@+id/app_video_loading"
android:visibility="visible" />
private long mOldTotalTrafficKb;
private boolean isFirstCaculateRate;
private static final int MSG_VIDEO_DOWNLOAD_RATE = 107;//
Runnable netSpeedRunnable = new Runnable() {//Runnable匿名类
@Override
public void run() {
controlBoxHandler.sendEmptyMessage(MSG_VIDEO_DOWNLOAD_RATE);
try {
controlBoxHandler.postDelayed(this, MSG_SEEKBAR_CHANGE_INTERVAL_TIME);
} catch (Exception e) {
}
}
};
public long getUidRxBytes() { //获取总的接受字节数,包含Mobile和WiFi等
PackageManager pm = getPackageManager();
ApplicationInfo ai = null;
try {
ai = pm.getApplicationInfo("com.nayun.framework", PackageManager.GET_ACTIVITIES);
} catch (PackageManager.NameNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return TrafficStats.getUidRxBytes(ai.uid) == TrafficStats.UNSUPPORTED ? 0 : (TrafficStats.getTotalRxBytes() / 1024);
}
case MSG_VIDEO_DOWNLOAD_RATE: //Handler中的根据消息Id处理逻辑
long newTrafficKb = getUidRxBytes() - mOldTotalTrafficKb;
mOldTotalTrafficKb = getUidRxBytes();
if(!isFirstCaculateRate){
isFirstCaculateRate = true;
}else{
tvShowDownRate.setText(""+newTrafficKb+"kb/s");
}
break;
或
case MSG_VIDEO_DOWNLOAD_RATE: long newTrafficKb = getUidRxBytes() - mOldTotalTrafficKb; mOldTotalTrafficKb = getUidRxBytes(); if (newTrafficKb > 1500) { newTrafficKb = 400; } tvShowDownRate.setText("" + newTrafficKb + "kb/s");case IMediaPlayer.MEDIA_INFO_BUFFERING_START://MediaPlayer setOnInfoListener
if (mProgressBar.getVisibility() == View.GONE) {
mProgressBar.setVisibility(View.VISIBLE);
}
controlBoxHandler.post(netSpeedRunnable);
tvShowDownRate.setVisibility(View.VISIBLE);//show_down_rate
break;
case IMediaPlayer.MEDIA_INFO_BUFFERING_END:
if (mProgressBar.getVisibility() == View.VISIBLE) {
mProgressBar.setVisibility(View.GONE);
}
controlBoxHandler.removeCallbacks(netSpeedRunnable);
tvShowDownRate.setVisibility(View.GONE);
break;