Android中使用cmwap接入点访问互联网的问题及解决办法


Java代码   收藏代码
  1. //检查网络 是否正常  
  2.     private boolean checkNet(){  
  3.      
  4. ConnectivityManager manager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);    
  5.      
  6. netWrokInfo = manager.getActiveNetworkInfo();    
  7.        if (netWrokInfo == null || !netWrokInfo.isAvailable()) {   
  8.            Toast.makeText(this"当前的网络不可用,请开启\n网络", Toast.LENGTH_LONG).show();  
  9.            return false;  
  10.        }  
  11.        else if(netWrokInfo.getTypeName().equals("MOBILE")& netWrokInfo.getExt raInfo().equals("cmwap")){  
  12.            Toast.makeText(this"cmwap网络不可用,请选择cmnet网络", Toast.LENGTH_LONG).show();  
  13.            return false;  
  14.        }else{  
  15.          
  16. return true;  
  17.        }  
  18.     }  

/** 
*Android 使用cmwap GPRS 方式联网 
*/ 
CMWAP和CMNET只是中国移动为其划分的两个GPRS接入方式。中国移动对CMWAP作了一定的限制,主要表现在CMWAP接入时只能访问 GPRS网络内的IP(10.*.*.*),而无法通过路由访问Internet,我们用CMWAP浏览Internet上的网页 就是通过WAP网关协议或它提供的HTTP代理服务实现的。 因此,只有满足以下两个条件的应用 才能在中国移动的CMWAP接入方式下正常工作: 
1.应用程序 的网络请求基于HTTP协议。 
2.应用程序 支持HTTP代理协议或WAP网关协议。 
这也就是为什么我们的G1无法正常用CMWAP的原因。 
一句话:CMWAP是移动限制的,理论上只能上WAP网,而CMNET可以用GPRS浏览WWW 
方法一: 
Java代码   收藏代码
  1. URL url = new URL("http://10.0.0.172/img/baidu_logo.gif");    
  2. HttpURLConnection conn = (HttpURLConnection) url.openConnection();    
  3. conn.setRequestProperty("X-Online-Host""www.baidu.com");    
  4. conn.setDoInput(true);    
  5. conn.connect();    
  6. InputStream is = conn.getInputStream();    
  7. bitmap = BitmapFactory.decodeStream(is);    
  8. is.close();    
  9. conn.disconnect();    

方法二: 
CODE: 
Java代码   收藏代码
  1. package org.apache.http.examp les.client;  
  2.   
  3. import org.apache.http.Header;  
  4. import org.apache.http.HttpEntity;  
  5. import org.apache.http.HttpHost;  
  6. import org.apache.http.HttpResponse;  
  7. import org.apache.http.client.HttpClient;  
  8. import org.apache.http.client.methods.HttpGet;  
  9. import org.apache.http.conn.params.ConnRoutePNames;  
  10. import org.apache.http.impl.client.DefaultHttpClient;  
  11. import org.apache.http.util.EntityUtils;  
  12.   
  13. public class ClientExecuteProxy {  
  14.   
  15.     public static void main(String [] args)throws Exception {  
  16.   
  17.         HttpHost proxy = new HttpHost( "10.0.0.172"80"http");  
  18.         HttpHost target = new HttpHost("YOUR_TARGET_IP"80"http");          
  19.   
  20.         DefaultHttpClient httpclient = new DefaultHttpClient();  
  21.         httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);  
  22.   
  23.           
  24.         HttpGet req = new HttpGet("/");  
  25.   
  26.         System.out.println("executing request to " + target + " via " + proxy);  
  27.         HttpResponse rsp = httpclient.execute(target, req);  
  28.         HttpEntity entity = rsp.getEntity();  
  29.   
  30.         System.out.println("----------------------------------------");  
  31.         System.out.println(rsp.getStatusLine());  
  32.         Header[] headers = rsp.getAllHeaders();  
  33.         for (int i = 0; i<headers.length; i++) {  
  34.             System.out.println(headers);  
  35.         }  
  36.         System.out.println("----------------------------------------");  
  37.   
  38.         if (entity != null) {  
  39.             System.out.println(EntityUtils.toString(entity));  
  40.         }  
  41.   
  42.         // When HttpClient instance is no longer needed,   
  43.         // shut down the connection manager to ensure  
  44.         // immediate deallocation of all system resources  
  45.         httpclient.getConnectionManager().shutdown();          
  46.     }  
  47.   
  48. }  


在Android上建立GPRS连接 
Java代码   收藏代码
  1. private boolean openDataConnection() {  
  2.     // Set up data connection.  
  3.     DataConnection conn = DataConnection.getInstance();          
  4.   
  5.         if (connectMode == 0) {  
  6.             ret = conn.openConnection(mContext, "cmwap""cmwap""cmwap");  
  7.         } else {  
  8.             ret = conn.openConnection(mContext, "cmnet""""");  
  9.         }  
  10.   
  11. }  


android下实现WAP和NET的自适应 
Java代码   收藏代码
  1. import java.net.HttpURLConnection;  
  2. import java.net.InetSocketAddress;  
  3. import java.net.URL;  
  4. /** 
  5.  *  下载器 
  6.  */  
  7. public class DownloadUtil {  
  8.  private static final String TAG = "Downloader";  
  9.  /** 
  10.   * @return InputStream 下载 
  11.   */  
  12.  public static HttpURLConnection download(String url) {  
  13.   HttpURLConnection conn = null;  
  14.   try {  
  15.    String proxyHost = android.net.Proxy.getDefaultHost();  
  16.    if (proxyHost != null) {//如果是wap方式,要加网关  
  17.     java.net.Proxy p = new java.net.Proxy(java.net.Proxy.Type.HTTP, new InetSocketAddress(  
  18.       android.net.Proxy.getDefaultHost(), android.net.Proxy.getDefaultPort()));  
  19.     conn = (HttpURLConnection) new URL(url).openConnection(p);  
  20.    } else {  
  21.     conn = (HttpURLConnection) new URL(url).openConnection();  
  22.    }  
  23.    // conn.setReadTimeout(5000);  
  24.    conn.setConnectTimeout(10000);  
  25.    conn.setRequestMethod("GET");  
  26.    conn.setRequestProperty(  
  27.      "Accept",  
  28.      "image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*");  
  29.    conn.setRequestProperty("Accept-Language""zh-CN");  
  30.    conn.setRequestProperty("Referer", url);  
  31.    conn.setRequestProperty("Charset""UTF-8");  
  32.    conn.setRequestProperty(  
  33.      "User-Agent",  
  34.      "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)");  
  35.    conn.setRequestProperty("Connection""Keep-Alive");  
  36.    conn.connect();  
  37.    if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {  
  38.     return conn;  
  39.    }  
  40.   } catch (Exception e) {  
  41.    e.printStackTrace();  
  42.   }  
  43.   return null;  
  44.  }  
  45. }  


Android 判断网络状态 
在使用Android连接网络的时候,并不是每次都能连接到网络,在这个时候,我们最好是在程序启动的时候对网络的状态进行一下判断,如果没有网络则进行即时提醒用户进行设置。 
要判断网络状态,首先需要有相应的权限,下面为权限代码: 
即允许访问网络状态: 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> 
下面为判断代码: 
Java代码   收藏代码
  1. private boolean NetWorkStatus() {  
  2.   
  3. boolean netSataus = false;  
  4.         ConnectivityManager cwjManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);  
  5.   
  6.         cwjManager.getActiveNetworkInfo();  
  7.   
  8. if (cwjManager.getActiveNetworkInfo() != null) {  
  9.             netSataus = cwjManager.getActiveNetworkInfo().isAvailable();  
  10.         }  
  11.   
  12. if (netSataus) {  
  13.             Builder b = new AlertDialog.Builder(this).setTitle("没有可用的网络")  
  14.                     .setMessage("是否对网络进行设置?");  
  15.             b.setPositiveButton("是"new DialogInterface.OnClickListener() {  
  16. public void onClick(DialogInterface dialog, int whichButton) {  
  17.                     Intent mIntent = new Intent("/");  
  18.                     ComponentName comp = new ComponentName(  
  19. "com.android.settings",  
  20. "com.android.settings.WirelessSettings");  
  21.                     mIntent.setComponent(comp);  
  22.                     mIntent.setAction("android.intent.action.VIEW");  
  23.                     startActivityForResult(mIntent,0);  // 如果在设置完成后需要再次进行操作,可以重写操作代码,在这里不再重写  
  24.                 }  
  25.             }).setNeutralButton("否"new DialogInterface.OnClickListener() {  
  26. public void onClick(DialogInterface dialog, int whichButton) {  
  27.                     dialog.cancel();  
  28.                 }  
  29.             }).show();  
  30.         }  
  31.   
  32. return netSataus;  
  33.     }  
  34. //通过上面的代码即可完成对网络状态的判断!具体怎么自己选择网络进行设置,还没有弄明白,等弄明白了,再写!  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值