《2022年Android的APN设定与上网处理 .pdf》由会员分享,可在线阅读,更多相关《2022年Android的APN设定与上网处理 .pdf(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Android 的 APN设定与上网处理手机上网分为 wap和 net 两种方式,使用 net 手机就会直接连入互联网, 而使用wap则会中间多了一个代理网关,移动联通均是10.0.0.172 ,端口80。而写与联网有关的代码, wap和 net 是不一样的: wap一般是这样:URL url = new URL(http:/10.0.0.172:80/index.htm); HttpURLConnection hc = (HttpURLConnection) url.openConnection(); hc.setRequestProperty(X-Online-Host, ); net一般
2、是这样:URL url = new URL(http:/ HttpURLConnection hc = (HttpURLConnection) url.openConnection(); 因此,编写程序时就要检测当前的APN 类型,判断是 wap还是 net 方式,有时候可能还要修改当前的APN ,都是要解决的问题。检查当前 APN :获取所有的 APN ,方法是通过 ContentResolver ,uri 地址为content:/telephony/carriers。代码如下:Uri uri = Uri.parse(content:/telephony/carriers); Cursor
3、cr = getContentResolver().query(uri, null, null, null, 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 3 页 - - - - - - - - - null); while(cr!=null & cr.moveToNext() / APN id String id = cr.getString(cr.getColumnIndex(_id); / APN name String apn = cr.getString(cr
4、.getColumnIndex(apn); / do other things. 里面的 _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
5、 ,是存储短信的数据库)里面有 200多个 apn,只有 current为1的才会在手机的 apn 设置里面显示出来。数据库的各个字段对应了系统设置里面的各项。上面代码里面cr.getString(cr.getColumnIndex(_id)就是取一个 apn 的_id 了,同理可以取出其他需要的字段。但是我们这些还没什么用,我们要的是当前所用的apn。获取当前所使用的apn 的 uri 地址为:content:/telephony/carriers/preferapn。代码同上,替换 uri后再 取,发现取出来的只有一个,这个就是当前所使用的apn了,就是系统设置里面apn列表中后面那个小圆
6、圈被选中的那个apn。这个 apn 系统保存在一个 xml 文件里,地址为:/data/data/com.android.providers.telephony/shared_prefs/preferred-apn.xml 。同样可以取出这个文件打开看看,里面内容很简单: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 3 页 - - - - - - - - - 就是说当前 apn 设定为数据库中 _id 为218的那个 apn了。要判断这个 apn 是 wap还是 ne
7、t ,最好是看 proxy 是不是 10.0.0.172 ,因为apn 字段是可以任意修改的,有可能用户把apn字段随便填写。对了,关于 apn 的操作相关代码在android 源代码的packages/providers/TelephonyProvider/src/com /android/providers/telephony/TelephonyProvider.java中,有兴趣可以看看。修改当前 APN :接着就是修改它了。 为什么要修改?有可能用户的卡只能wap上网,但是他却设定了 net 。程序中检测到net 但无法联网,就把系统设置改为wap再试试。Uri uri = Uri.p
8、arse(content:/telephony/carriers/preferapn); ContentResolver resolver = getContentResolver(); ContentValues values = new ContentValues(); values.put(apn_id, id); resolver.update(uri, values, null, null); 这里面的 id 就是对应数据库里面的 _id 字段了。至于如何取到net 的 APN ,我看获取所有的 APN 里面 current为1的然后自己判断了,要不自己新建一个apn也行。至于哪些 apn 的 current为1, 应该是系统判断国家码和网络码, 也就是 MCC和 MNC ,和当前网络符合的才让它显示出来。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 3 页 - - - - - - - - -