Android网络连接的理解

Android的网络连接类型大致分为wifi和mobile两种,wifi比较容易理解,难理解一点的是mobile类型。

首先,检查当前是否有网络连接采用的方法如下:

public static boolean isNetworkConnected(Context context) {  
            NetworkInfo networkInfo = ((ConnectivityManager) context  
                    .getApplicationContext().getSystemService("connectivity"))  
                    .getActiveNetworkInfo();  
            if (networkInfo != null) {  
                return networkInfo.isConnectedOrConnecting();  
            }  
            return false;  
}  

然后,区分为wifi还是mobile网络,采用的方法如下:

        private void checkNetworkType(Context context) {  
            NetworkInfo networkInfo = ((ConnectivityManager) context  
                    .getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();  
            if (networkInfo != null) {  
                if (!"wifi".equals(networkInfo.getTypeName().toLowerCase())) {  
                    checkApn(context); //后续进行解释 
                    return;  
                }  
                this.mUseWap = false;  //显然,如果是wifi网络,自然不使用wap
            }  
        }  

如果不是wifi网络就要判断它是否为wap还是net了,查看当前的apn设置,

        private void checkApn(Context context) {  
            ContentResolver contentResolver = context.getContentResolver();  
            Uri uri = Uri.parse("content://telephony/carriers/preferapn");  
            String[] apnInfo = new String[3];  
            apnInfo[0] = "apn";  
            apnInfo[1] = "proxy";  
            apnInfo[2] = "port";  
      
            Cursor cursor = contentResolver.query(uri, apnInfo, null, null, null);  
            if (cursor != null) {  
                while (cursor.moveToFirst()) {  
                    this.mApn = cursor.getString(cursor.getColumnIndex("apn"));  
                    this.mProxy = cursor.getString(cursor.getColumnIndex("proxy"));  
                    this.mPort = cursor.getString(cursor.getColumnIndex("port"));  
      
                    // 代理为空   
                    if ((this.mProxy == null) || (this.mProxy.length() <= 0)) {  
                        String apn = this.mApn.toUpperCase();  
                          
                        // 中国移动WAP设置:APN:CMWAP;代理:10.0.0.172;端口:80   
                        // 中国联通WAP设置:APN:UNIWAP;代理:10.0.0.172;端口:80   
                        // 中国联通WAP设置(3G):APN:3GWAP;代理:10.0.0.172;端口:80   
                        if ((apn.equals("CMWAP")) || (apn.equals("UNIWAP")) || (apn.equals("3GWAP"))) {  
                            this.mUseWap = true;  
                            this.mProxy = "10.0.0.172";  
                            this.mPort = "80";  
                            break;  
                        }  
                          
                        // 中国电信WAP设置:APN(或者接入点名称):CTWAP;代理:10.0.0.200;端口:80   
                        if (apn.equals("CTWAP")) {  
                            this.mUseWap = true;  
                            this.mProxy = "10.0.0.200";  
                            this.mPort = "80";  
                            break;  
                        }  
                          
                    }  
                    this.mPort = "80";  
                    this.mUseWap = true;  
                    break;  
                }  
      
            }  
      
            this.mUseWap = false;  
            cursor.close();  
        } 

而对于短彩来说,不管当前是否有数据连接,短彩的发送走的TYPE_MOBILE通路。如果没有TYPE_MOBILE通路他就会启动一次mobile通路.

mConnMgr.startUsingNetworkFeature(
                ConnectivityManager.TYPE_MOBILE, PhoneFactory.getFeature(Phone.FEATURE_ENABLE_MMS, mPhoneId))

等待发送完成后,又将该通路进行关闭。不过,短信是通过WAP网来发送的,所以需要设置代理。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值