安卓如何获得当前网络带宽

ddxu 2015-10-14 04:27:00
我现在开发一个安卓应用需要开启一个service来实时获取当前网络(网络可能是有线,无线,数据网络中的任何一种)的使用带宽(bps)、网络最大带宽。求大神指导!!!
...全文
769 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lijun0213 2018-01-20
  • 打赏
  • 举报
回复
您好,请问您这个问题解决了吗,能不能给我参考学习呢,我的QQ 524723028
ddxu 2015-10-16
  • 打赏
  • 举报
回复
引用 1 楼 juy19901128 的回复:
package com.siolette.util;

import com.siolette.roster.Network;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.telephony.TelephonyManager;

/**几个网络相关的工具
 * @author WenYF
 *
 */
public class NetworkUtil {

	private final static String TAG = "NetworkUtil";
	
	/**得到当前网络类型
	 * @param context 上下文
	 * @return 返回当前网络
	 */
	public static Network getCurrentNetwork(Context context){
		ConnectivityManager cm = (ConnectivityManager) context   
                .getSystemService(Context.CONNECTIVITY_SERVICE);   
		
		if(cm == null){
			Log.w(TAG, "ConnectivityManager is null");
			return Network.NT_NONE; 
		}
		
		NetworkInfo networkInfo = cm.getActiveNetworkInfo();
		
		if(networkInfo != null){
			int type = networkInfo.getType();
			int subtype = networkInfo.getSubtype();
			return isConnectionFast(type, subtype);
		}else{
			Log.w(TAG, "networkInfo is null");
			return Network.NT_NONE;
		}
	}
	
	
	private static Network isConnectionFast(int type, int subType){
        if (type == ConnectivityManager.TYPE_WIFI) {
            return Network.NT_WIFI;
        } else if (type == ConnectivityManager.TYPE_MOBILE) {
            switch (subType) {
	            case TelephonyManager.NETWORK_TYPE_1xRTT:
	                return Network.NT_2G; // ~ 50-100 kbps
	            case TelephonyManager.NETWORK_TYPE_CDMA:
	                return Network.NT_2G; // ~ 14-64 kbps
	            case TelephonyManager.NETWORK_TYPE_EDGE:
	                return Network.NT_2G; // ~ 50-100 kbps
	            case TelephonyManager.NETWORK_TYPE_GPRS:
	                return Network.NT_2G; // ~ 100 kbps
	            case TelephonyManager.NETWORK_TYPE_EVDO_0:
	                return Network.NT_3G; // ~25 kbps 
	            case TelephonyManager.NETWORK_TYPE_LTE:
	                return Network.NT_4G; // ~ 400-1000 kbps
	            case TelephonyManager.NETWORK_TYPE_EVDO_A:
	                return Network.NT_3G; // ~ 600-1400 kbps
	            case TelephonyManager.NETWORK_TYPE_HSDPA:
	                return Network.NT_3G; // ~ 2-14 Mbps
	            case TelephonyManager.NETWORK_TYPE_HSPA:
	                return Network.NT_3G; // ~ 700-1700 kbps
	            case TelephonyManager.NETWORK_TYPE_HSUPA:
	                return Network.NT_3G; // ~ 1-23 Mbps
	            case TelephonyManager.NETWORK_TYPE_UMTS:
	                return Network.NT_3G; // ~ 400-7000 kbps
	            case TelephonyManager.NETWORK_TYPE_EHRPD:
	                return Network.NT_3G; // ~ 1-2 Mbps
	            case TelephonyManager.NETWORK_TYPE_EVDO_B:
	                return Network.NT_3G; // ~ 5 Mbps
	            case TelephonyManager.NETWORK_TYPE_HSPAP:
	                return Network.NT_3G; // ~ 10-20 Mbps
	            case TelephonyManager.NETWORK_TYPE_IDEN:
	                return Network.NT_2G; // ~ 10+ Mbps
	            case TelephonyManager.NETWORK_TYPE_UNKNOWN:
	            default:
	                return Network.NT_NONE;
            }
        } else {
        	return Network.NT_NONE;
        }
    }
}
如何获取WIFI的实时带宽呢?wifi的带宽会变化吧,所以怎么实时获取呢? 根据网络连接方式也只能知道带宽范围,不能知道当前连接的实时带宽吧?用当前实时网速计算带宽可取吗?
ddxu 2015-10-16
  • 打赏
  • 举报
回复
1楼的意思是带宽是由网络类型决定的吗?这个返回都是一样的怎么区分值呢?Network是自定义类吗?代码放到eclipse中报错。 case TelephonyManager.NETWORK_TYPE_1xRTT: return Network.NT_2G; // ~ 50-100 kbps case TelephonyManager.NETWORK_TYPE_CDMA: return Network.NT_2G; // ~ 14-64 kbps case TelephonyManager.NETWORK_TYPE_EDGE: return Network.NT_2G; // ~ 50-100 kbps case TelephonyManager.NETWORK_TYPE_GPRS: return Network.NT_2G; // ~ 100 kbps
lsunggary 2015-10-15
  • 打赏
  • 举报
回复
哇塞。正好我也很需要这种代码。 谢谢楼上分享。
dn小小 2015-10-15
  • 打赏
  • 举报
回复
package com.siolette.util;

import com.siolette.roster.Network;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.telephony.TelephonyManager;

/**几个网络相关的工具
 * @author WenYF
 *
 */
public class NetworkUtil {

	private final static String TAG = "NetworkUtil";
	
	/**得到当前网络类型
	 * @param context 上下文
	 * @return 返回当前网络
	 */
	public static Network getCurrentNetwork(Context context){
		ConnectivityManager cm = (ConnectivityManager) context   
                .getSystemService(Context.CONNECTIVITY_SERVICE);   
		
		if(cm == null){
			Log.w(TAG, "ConnectivityManager is null");
			return Network.NT_NONE; 
		}
		
		NetworkInfo networkInfo = cm.getActiveNetworkInfo();
		
		if(networkInfo != null){
			int type = networkInfo.getType();
			int subtype = networkInfo.getSubtype();
			return isConnectionFast(type, subtype);
		}else{
			Log.w(TAG, "networkInfo is null");
			return Network.NT_NONE;
		}
	}
	
	
	private static Network isConnectionFast(int type, int subType){
        if (type == ConnectivityManager.TYPE_WIFI) {
            return Network.NT_WIFI;
        } else if (type == ConnectivityManager.TYPE_MOBILE) {
            switch (subType) {
	            case TelephonyManager.NETWORK_TYPE_1xRTT:
	                return Network.NT_2G; // ~ 50-100 kbps
	            case TelephonyManager.NETWORK_TYPE_CDMA:
	                return Network.NT_2G; // ~ 14-64 kbps
	            case TelephonyManager.NETWORK_TYPE_EDGE:
	                return Network.NT_2G; // ~ 50-100 kbps
	            case TelephonyManager.NETWORK_TYPE_GPRS:
	                return Network.NT_2G; // ~ 100 kbps
	            case TelephonyManager.NETWORK_TYPE_EVDO_0:
	                return Network.NT_3G; // ~25 kbps 
	            case TelephonyManager.NETWORK_TYPE_LTE:
	                return Network.NT_4G; // ~ 400-1000 kbps
	            case TelephonyManager.NETWORK_TYPE_EVDO_A:
	                return Network.NT_3G; // ~ 600-1400 kbps
	            case TelephonyManager.NETWORK_TYPE_HSDPA:
	                return Network.NT_3G; // ~ 2-14 Mbps
	            case TelephonyManager.NETWORK_TYPE_HSPA:
	                return Network.NT_3G; // ~ 700-1700 kbps
	            case TelephonyManager.NETWORK_TYPE_HSUPA:
	                return Network.NT_3G; // ~ 1-23 Mbps
	            case TelephonyManager.NETWORK_TYPE_UMTS:
	                return Network.NT_3G; // ~ 400-7000 kbps
	            case TelephonyManager.NETWORK_TYPE_EHRPD:
	                return Network.NT_3G; // ~ 1-2 Mbps
	            case TelephonyManager.NETWORK_TYPE_EVDO_B:
	                return Network.NT_3G; // ~ 5 Mbps
	            case TelephonyManager.NETWORK_TYPE_HSPAP:
	                return Network.NT_3G; // ~ 10-20 Mbps
	            case TelephonyManager.NETWORK_TYPE_IDEN:
	                return Network.NT_2G; // ~ 10+ Mbps
	            case TelephonyManager.NETWORK_TYPE_UNKNOWN:
	            default:
	                return Network.NT_NONE;
            }
        } else {
        	return Network.NT_NONE;
        }
    }
}

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧