Android APN+WAP网络访问代理

在2g和3g手机时代,一个重要的角色是gprs流量,好处是分布广泛,坏处是价格昂贵网速奇慢。

能分配这种流量的只有移动电信运营商才有,你懂得。

/**
	 * 检查代理,是否cnwap接入
	 */
	public static  Proxy detectProxy() {
	        Proxy mProxy = null;
		ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
		//获得当前cnwap的网络状态
		NetworkInfo ni = cm.getActiveNetworkInfo();
		//检查cnwap网络是否可以用
		if (ni != null && ni.isAvailable()
				&& ni.getType() == ConnectivityManager.TYPE_MOBILE) {
		        //获得默认代理主句地址
			String proxyHost = android.net.Proxy.getDefaultHost();
			//获得默认代理端口
			int port = android.net.Proxy.getDefaultPort();
			if (proxyHost != null) {
			        //获得当前手机的网络地址
				final InetSocketAddress sa = new InetSocketAddress(proxyHost,
						port);
				//生成代理对象
				mProxy = new Proxy(Proxy.Type.HTTP, sa);
			}
		}
		
		return mProxy;
	}
	 //获得代理连接对象
	public static HttpURLConnection getHttpConnection (String surl) throws Exception
	{
	    Proxy mProxy = detectProxy();
	    HttpURLConnection conn = null;
	    URL url = new URL(surl);
	    if(mProxy!=null)
	    {
	       conn = (HttpURLConnection) url.openConnection(mProxy);
	    }else{
	      conn = (HttpURLConnection) url.openConnection();
	    }
	    
	    return conn;
	}	

这种cnwap代理方式是昂贵的,所以一般不推荐使用这种方式请求网络数据


关于APN的相关信息,我们通过如下方式获取

package com.hust.iprai;  
  
import android.content.ContentResolver;  
import android.content.Context;  
import android.database.Cursor;  
import android.net.ConnectivityManager;  
import android.net.NetworkInfo;  
import android.net.Uri;  
  
public class APNManager {  
  
    public static final Uri PREFERRED_APN_URI;  
  
    private String mApn; // 接入点名称   
  
    private String mPort; // 端口号   
  
    private String mProxy; // 代理服务器   
  
    private boolean mUseWap; // 是否正在使用WAP   
  
    static {  
        
        //取得全部的APN列表:content://telephony/carriers;
        //取得当前设置的APN:content://telephony/carriers/preferapn;
        //取得current=1的APN:content://telephony/carriers/current;
        PREFERRED_APN_URI = Uri.parse("content://telephony/carriers/preferapn"); // 取得当前设置的APN  
    }  
  
    public APNManager(Context context) {  
        checkNetworkType(context);  
    }  
  
    /** 
     * 获得当前设置的APN相关参数 
     * @param context 
     */  
    private void checkApn(Context context) {  
        ContentResolver contentResolver = context.getContentResolver();  
        Uri uri = PREFERRED_APN_URI;  
        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();  
    }  
  
    /** 
     * 检测当前使用的网络类型是WIFI还是WAP 
     * @param context 
     */  
    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;  
        }  
    }  
  
    /** 
     * 判断当前网络连接状态 
     * @param context 
     * @return 
     */  
    public static boolean isNetworkConnected(Context context) {  
        NetworkInfo networkInfo = ((ConnectivityManager) context  
                .getApplicationContext().getSystemService("connectivity"))  
                .getActiveNetworkInfo();  
        if (networkInfo != null) {  
            return networkInfo.isConnectedOrConnecting();  
        }  
        return false;  
    }  
  
    public String getApn() {  
        return this.mApn;  
    }  
  
    public String getProxy() {  
        return this.mProxy;  
    }  
  
    public String getProxyPort() {  
        return this.mPort;  
    }  
  
    public boolean isWapNetwork() {  
        return this.mUseWap;  
    }  
}


你可能感兴趣的:(WAP,Proxy网络代理,3g(CnWap))