[android] 网络链接类型和渠道。转:android网络项目 wap代理设置。

2.2.1 wap的方式,我们用CMWAP浏览Internet上的网页就是通过WAP网关协议或它提供的HTTP代理服务实现的

1.兑现方式

森口都懂移动提供的星星独不等的接入点,即:CMWAP 和 CMNET
,前者是吗手机WAP上网而开之,后者则根本是啊PC、笔记本电脑、PDA等采取GPRS上网服务之。它们以促成方式上连从未外区别,但因为固定不同,所以和CMNET相比,CMWAP便生矣一部分限制,资费上吧有差别。

1.1使用HttpUrlConnection

咱常说之无绳电话机包月上网,就是赖的的包月的wap。为了打利用被分别两者的一定,移动对CMWAP作了一定的限制,主要呈现在CMWAP接入时不得不看GPRS网络内的IP(10...*),而望洋兴叹透过路由访问Internet。我们因而CMWAP浏览Internet上的网页就经过WAP网关合计或其提供的HTTP代理服务实现之。也即是亟需经过动GPRS网络唯一的一个WAP网关:10.0.0.172。CMNET拥有了的Internet访问权,这里就是无多说了,主要让咱来探视CMWAP。因为有了方提到的范围,CMWAP的适用范围就要看WAP网关所提供的支撑了。目前,移动的WAP网关对外只提供HTTP代理协议(80和8080端口)和WAP网关共商(9201端口)。

1.2使用HttpClient

之所以,只有满足以下简单单原则的动才会于倒的CMWAP接入方式下健康办事:
1、应用程序的网要基于HTTP协议。
2、应用程序支持HTTP代理协议或WAP网关协议。

1.3利用Socket,比如:豌豆荚,聊天工具

要是cmnet则非被其他的限量。其实就是,通过cmwap的法访,需要活动活动的网关通过http协议去老是,这样的结局便是速度会转换缓慢,而经cmnet来连续的,就是一直连接至Internet上之服务器,速度会比cmwap的尽早有。呵呵!相信就用了之情侣,都见面感受过两者的分。

 

动用cmwap需要装代理,而采取wifi和cmnet则非欲,设置后倒读不顶多少,方法如下:

2.简报渠道

每当Android中,有三三两两种不同之HttpClient类:

2.1 WLAN(wi-fi),100米左右的数额传

一个是Java.NET包中的:HttpURLConnection,它装代理代码如下:

2.2 手机APN接入点(基站)

Proxy proxy=new Proxy(java.net.Proxy.Type.HTTP,new InetSocketAddress(“10.0.0.172″,80));  
HttpURLConnection connection=(HttpURLConnection) url.openConnection(proxy);

2.2.1 wap的办法,中国风味,首先会见连续电信运营商代理拦截10.0.0.172,HttpUrlConnection会无稳定

还有一个是Apache的HttpClient:

2.2.2 net的方式

DefaultHttpClient httpclient = new DefaultHttpClient(); HttpHost proxy = new HttpHost(“10.0.0.172″, 80);   
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);

 

Android 中争下 CMWAP 联网
拜中国移动的Wap网络要安装代理: Host:”10.0.0.172″ Port:80
于Android中,有少数栽不同之HttpClient类,一个凡是Java.Net包吃的:HttpURLConnection,它装代理代码如下:

3.简报工具

Proxy proxy=new Proxy(java.net.Proxy.Type.HTTP,new InetSocketAddress(“10.0.0.172″,80));   
HttpURLConnection connection=(HttpURLConnection) url.openConnection(proxy);

3.1判定网络项目

再有一个凡Apache的HttpClient:

据悉Context上下文,判断是wifi还是APN,然后又判断APN的联网方式,有代理信息的凡wap没有底是net

DefaultHttpClient httpclient = new DefaultHttpClient();
HttpHost proxy = new HttpHost(“10.0.0.172″, 80);
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);  
package com.tsh.lottery.net;

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 NetUtils {
    /**
     * 获取网络状态
     * @param context
     * @return
     */
    public static String getNetworkInfo(Context context) {
        ConnectivityManager cm=(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        //判断wifi
        NetworkInfo networkInfo=cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        if(networkInfo!=null && networkInfo.isConnected()){
            return "wifi";
        }
        //判断APN
        NetworkInfo mobileInfo=cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
        if(mobileInfo!=null && mobileInfo.isConnected()){
            //获取APN接入方式,因为权限问题,没有成功
//            ContentResolver resolver=context.getContentResolver();
//            Cursor cursor=resolver.query(Uri.parse("content://telephony/carriers"), null, null, null, null);
//            if(cursor!=null && cursor.moveToFirst()){
//                String proxy=cursor.getString(cursor.getColumnIndex("proxy"));
//                System.out.println(proxy);
//            }
            return "mobile";
        }
        return "no";
    }
}

1、获取网络型以及信,查看网络连接是wifi还是GPRS中的cmnet或是cmwap

 

    private boolean getNetType() {  
        ConnectivityManager conn = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);  
        if (conn == null)  
            return false;  
        NetworkInfo info = conn.getActiveNetworkInfo();  
        if (info == null)  
            return false;  
        String type = info.getTypeName();// MOBILE(GPRS);WIFI  
        Log.v("tag", "NetworkType=" + type);  
        if (type.equals("WIFI")) {  
            return true;  
        } else if (type.equals("MOBILE")) {  
            String apn = getAPN(this);  
            Log.v("tag", "APN=" + apn);  
            if (apn != null && apn.equals("cmwap")) {  
                return false;  
            } else {  
                return true;  
            }  
        }  
        return false;  
    } 

 

2、检测网络连接是否留存

 

    public static boolean isNetworkAvailable( Activity mActivity ) {  
        Context context = mActivity.getApplicationContext();  
        ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);  
        if (connectivity == null) {  
            return false;  
        } else {  
            NetworkInfo[] info = connectivity.getAllNetworkInfo();  
            if (info != null) {  
                for (int i = 0; i < info.length; i++) {  
                    if (info[i].getState() == NetworkInfo.State.CONNECTED) {  
                        return true;  
                    }  
                }  
            }  
        }  
        return false;  
    } 

3、android接入点添加APN问题(暂时不了解这是胡用之)
当android开发被,使用如下代码设置APN:

率先步,创建activity,使用如下代码设置APN:

    ContentValues values = new ContentValues();  
    values.put(“NAME”, “CMCC”);  
    values.put(“APN”, “CMCC”);  
    values.put(“PROXY”, “192.168.0.171″);  
    values.put(“PORT”, “80″);  
    values.put(“USER”, “”);  
    values.put(“PASSWORD”, “”);  
    this.getContentResolver().insert(Uri.parse("content://telephony/carriers"), values);

于AndroidManifest.xml中补充加如下内容:

<uses-permission android:name=”android.permission.WRITE_APN_SETTINGS” />