android 使用wap 联网

本文介绍了解决Android系统中网络请求代理设置问题的方法,包括数据库读取、权限添加等复杂步骤,以及一个简单的替代方案,即通过检查当前网络类型来自动设置代理。文章详细解释了如何检查网络类型是否为wap请求,以及如何获取wap请求的IP地址和端口号,从而避免复杂的数据库操作和权限管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多朋友,在使用android做网络请求时,会遇上一个问题,当用户使用的是wap网络时,则需要为网络请求头加上代理地理和端口号。

而使用wifi或者cmnet网络连接时,不用设置代理地址和端口号。很多朋友在网上找到解决办法,是通过读取数据库,如:

  1. Cursorcursor=contentResolver.query(Uri.parse("content://telephony/carriers/preferapn")
  2. ,apnInfo,null,null,null);
Cursor cursor = contentResolver.query(Uri.parse("content://telephony/carriers/preferapn")
, apnInfo, null, null, null); 

然后就读取数据库里面的数据,为表头进行设置

然后就用

  1. HttpHosthttpHost=newHttpHost(proxy,port,"http");
  2. httpClient.getParams().setParameter("http.route.default-proxy",httpHost);
HttpHost httpHost = new HttpHost(proxy, port, "http");
httpClient.getParams().setParameter("http.route.default-proxy", httpHost);

类似这样的代码来添加网络请求代理。


但是读者朋友使用以上的代码进行设置代理请求,你会遇上不少麻烦,就是在android4.0以上的系统上,只要你使用网络请求就必崩,并且错误提示为

nor current process has android.permission.WRITE_APN_SETTINGS。

当你碰上这样的问题后,你豪不犹豫的就为系统添加<User-permision android.permission.WRITE_APN_SETTINGS />

可是你发现,问题依然出现。

有很多朋友对这样的解决办法有很多,正如下述:

第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:

1. 在应用程序的AndroidManifest.xml中的manifest节点中加入android:sharedUserId="android.uid.system"这个属性。

2. 修改Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行

3. 使用mm命令来编译,生成的apk就有修改系统时间的权限了。

第二个方法麻烦点,不过不用开虚拟机跑到源码环境下用make来编译:

1. 同上,加入android:sharedUserId="android.uid.system"这个属性。

2. 使用eclipse编译出apk文件,但是这个apk文件是不能用的。

3. 用压缩软件打开apk文件,删掉META-INF目录下的CERT.SF和CERT.RSA两个文件。

4. 使用目标系统的platform密钥来重新给apk文件签名。这步比较麻烦,首先找到密钥文件,在我的Android源码目录中的位置 是"build\target\product\security",下面的platform.pk8和platform.x509.pem两个文件。然 后用Android提供的Signapk工具来签名,signapk的源代码是在"build\tools\signapk"下,用法为java -jar signapk.jar platform.x509.pem platform.pk8 ***.apk ***_signed.apk 得到具有对应权限的APK.

工具和密钥下载地址:http://download.youkuaiyun.com/detail/bulkin/4329253

==******************************************=====以上代码对应用开发者来说太过于复杂了,根本不适用做应用开发的开发者,我刚开始用这个的时候,直接把我逼风了。

其实解决 上述的问题很简单,主要是想获取当前网络是否为wap请求,如果是wap请求,则获取到当前wap请求的ip地址和port就可以了。而上述的解决 办法都是获取wap的端口号和地址 。那我们有没有 其它的办法获取到这个内容呢。答案当然是有的,并且特别简单,还不需要这么复杂的操作数据库和权限限制。

获取当前连接代理地址和端口号代码如下:

  1. Stringproxy=Proxy.getDefaultHost();
  2. intport=Proxy.getDefaultPort()==-1?80:Proxy.getDefaultPort();
	String proxy=Proxy.getDefaultHost();
	int port = Proxy.getDefaultPort() == -1 ? 80 : Proxy.getDefaultPort();
接下来我们只要判断proxy是否为空就可以了,对于是否为wap请求,android有接口:

如下所示:

  1. NetworkInfonetworkInfo=((ConnectivityManager)context
  2. .getApplicationContext().getSystemService("connectivity"))
  3. .getActiveNetworkInfo();
  4. publicbooleanisWapNetwork(){
  5. //returnthis.mUseWap;
  6. if(networkInfo!=null&&networkInfo.getType()==0){//0表示是wap请求,你可以去检查一下0表示的是哪个宏
  7. returntrue;
  8. }else{
  9. returnfalse;
  10. }
  11. }
  12. if(isWapNetwork){//注意,is
  13. if(proxy!=null){
  14. HttpHosthttpHost=newHttpHost(proxy,port,"http");
  15. httpClient.getParams().setParameter("http.route.default-proxy",httpHost);
  16. }else{
  17. httpClient.getParams().removeParameter("http.route.default-proxy");
  18. }
  19. //HttpHosthost=newHttpHost(proxy,port);
  20. //request.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY,host);
  21. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值