困扰了我很久的,android ,http client无法直接使用cmwap,使用某些wifi会出错的问题,这2天被解决了,也是在网上无意看到别人说的就这么做了。
第一个。某些Wifi连接,有时候出现100-continue的错误,apache http client说什么协议错误,解决办法:
//关闭Expect:100-Continue握手
//100-Continue握手需谨慎使用,因为遇到不支持HTTP/1.1协议的服务器或者代理时会引起问题
httppost.getParams().setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, false);
第二个:使用cmwap上网,cmwap本质是使用代理上网,之前未明白,折腾了好久,用httpclient,很简单,如下:
HttpHost proxy = new HttpHost("10.0.0.172", 80);//设置cmwap代理
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
如果检测呢,一下代码可以检测当前移动网络的apn代理情况。
ConnectivityManager connectivity = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
// 获取网络连接管理的对象
NetworkInfo info = connectivity.getActiveNetworkInfo();
if (info != null && info.isConnected()) {
// 判断当前网络是否已经连接
if (info.getState() == NetworkInfo.State.CONNECTED) {
if(info.getTypeName().equals("WIFI")){
else{
Uri uri = Uri.parse("content://telephony/carriers/preferapn");
Cursor cr = context.getContentResolver().query(uri, null,null, null, null);
while (cr != null && cr.moveToNext()) {
// APN id
@SuppressWarnings("unused")
String id = cr.getString(cr.getColumnIndex("_id"));
// APN name
@SuppressWarnings("unused")
String apn = cr.getString(cr.getColumnIndex("apn"));
// do other things...
String strProxy = cr.getString(cr.getColumnIndex("proxy"));
String strPort = cr.getString(cr.getColumnIndex("port"));
if(strProxy != null && !"".equals(strProxy)){
Config.host = strProxy;
Config.port = Integer.valueOf(strPort);
}
}
}
}
}
现在很完美了,程序可以在cmnet,cmwap,以及wifi下完美运行。