首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

【转】 Android 1.5 的APN设定与下网处理

2012-09-29 
【转】 Android 1.5 的APN设定与上网处理手机上网分为wap和net两种方式,使用net手机就会直接连入互联网,而使

【转】 Android 1.5 的APN设定与上网处理

手机上网分为wap和net两种方式,使用net手机就会直接连入互联网,而使用wap则会中间多了一个代理网关,移动联通均是10.0.0.172,端口80。而写与联网有关的代码,wap和net是不一样的:

?

wap一般是这样:

?

   1. URL url = new URL("http://10.0.0.172:80/index.htm");     2.      3. HttpURLConnection hc = (HttpURLConnection) url.openConnection();     4.      5. hc.setRequestProperty("X-Online-Host", "www.csdn.net");  

?

? net一般是这样:

?

   1. URL url = new URL("http://www.csdn.net/index.htm");     2. HttpURLConnection hc = (HttpURLConnection) url.openConnection();  

?

因此,编写程序时就要检测当前的APN类型,判断是wap还是net方式,有时候可能还要修改当前的APN,都是要解决的问题。

?

?

检查当前APN:

?

获取所有的APN,方法是通过ContentResolver,uri地址为"content://telephony/carriers"。代码如下:

?

   1. Uri uri = Uri.parse("content://telephony/carriers");      2. Cursor cr = getContentResolver().query(uri, null, null, null, null);        3. while(cr!=null && cr.moveToNext()){      4.     // APN id     5.     String id = cr.getString(cr.getColumnIndex("_id"));       6.     // APN name      7.     String apn = cr.getString(cr.getColumnIndex("apn"));     8.     // do other things...     9. }  

?

?

里面的 _id 和 apn 是什么?这个是系统存储apn的数据库中的字段。系统把所有的apn都保存在数据库中,数据库在:/data/data/com.android.providers.telephony/databases/telephony.db。把你的G3连上电脑,使用adb命令:

?

adb pull /data/data/com.android.providers.telephony/databases/telephony.db f:\

??? 把它弄出来看看。(同目录下还有个mmssms.db,是存储短信的数据库)

【不知道为什么我用命令pull不出来???】

最后用eclipse自带的pull出来,利用SQLiteSpy查看

?

别人的图:

?

【转】 Android 1.5 的APN设定与下网处理

?

因为自己用模拟器

图如下


【转】 Android 1.5 的APN设定与下网处理

?

? 里面有200多个apn,只有current为1的才会在手机的apn设置里面显示出来。数据库的各个字段对应了系统设置里面的各项。上面代码里面cr.getString(cr.getColumnIndex("_id"))就是取一个apn的_id了,同理可以取出其他需要的字段。

??? 但是我们这些还没什么用,我们要的是当前所用的apn。

??? 获取当前所使用的apn的uri地址为:"content://telephony/carriers/preferapn"。代码同上,替换uri后再取,发现取出来的只有一个,这个就是当前所使用的apn了,就是系统设置里面apn列表中后面那个小圆圈被选中的那个apn。

??? 这个apn系统保存在一个xml文件里,地址为:/data/data/com.android.providers.telephony/shared_prefs/preferred-apn.xml 。同样可以取出这个文件打开看看,里面内容很简单:

?

  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>        <map>              <long name="apn_id" value="218" />    </map>
?

1. Uri uri = Uri.parse("content://telephony/carriers/preferapn"); 2. ContentResolver resolver = getContentResolver(); 3. ContentValues values = new ContentValues(); 4. values.put("apn_id", id); 5. resolver.update(uri, values, null, null); ?
这里面的id就是对应数据库里面的_id字段了。至于如何取到net的APN,我看获取所有的APN里面current为1的然后自己判断了,要不自己新建一个apn也行。??? 至于哪些apn的current为1,应该是系统判断国家码和网络码,也就是MCC和MNC,和当前网络符合的才让它显示出来。

【转】 Android 1.5 的APN设定与下网处理

热点排行