android编程访问apn

在csdn混,感觉应该要写一篇技术blog


最近搞自动修改android apn的程序,在网上找了n多,各种说法,也没有人汇总一下,导致我以为自动修改apn没问题,
结果一脚就踩上雷区。我的观点的授人以渔,话不多说,先说结论,再说原因,大家想看啥看啥。


如果你想通过程序设置、修改移动网络的apn,在4.0以前版本可以,4.0以后由于android权限改变,就只能root能搞定了,
这是我根据资料,源码分析的结果,play商店也有类似apndroid、apn onoff之类的软件,大家可以试一下是否可行,如果
有人能在非root的4.0以上版本修改apn成功(mms除外),也请回复我一下,我当然肯定也要把它搞定。


好了,结果说了,就说说原因吧,说来简单,实际上任何对于apn的修改,归根结底就是修改apn数据库,那么就需要这样
的应用具备一个权限:android.permission.WRITE_APN_SETTINGS,这个东东哪里有描述呢?
http://developer.android.com/reference/android/Manifest.permission.html#WRITE_APN_SETTINGS
对于4.0之前的版本,虽然描述中说不是给第三方使用,但是android似乎对这个权限没有做太多的限制,
对于4.0之后的版本就不同了,如果不是system下的app,会出现security_exception,在debug时会很清楚。


对于如何获取apn列表我就不贴源代码了,位置在:
https://android.googlesource.com/platform/packages/apps/Settings/+/jb-dev/src/com/android/settings/ApnSettings.java
其中的 fillList() 这个函数写的很清楚。
如果google被墙,可以看:
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/4.0.2_r1/com/android/settings/ApnSettings.java#ApnSettings
也是 fillList()。


那么选择某一个apn用什么呢? 当然是看同一个url下的setSelectedApnKey 函数了。
获取过去选择的apn,就看 getSelectedApnKey。


对了,哪位如果要转载,还是标注一下转自:http://blog.csdn.net/improg/article/category/1869431


当然还有另一组基于连接的api,ConnectivityManager,其中这里可以用的api是startUsingNetworkFeature,
样例代码在:https://android.googlesource.com/platform/cts/+/27e1c69a94903178081662caa6251a71d594ccb7/tests/tests/net/src/android/net/cts/ConnectivityManagerTest.java
其中测试函数有:testStartUsingNetworkFeature 等。
这里面,基于mobile的Feature包括:enableMMS,enableSUPL等,具体有哪些在:
https://android.googlesource.com/platform/frameworks/opt/telephony/+/tools_r22/src/java/com/android/internal/telephony/Phone.java
有详细列表,实际上这并非用于根据apn名称选择特定apn,主要是创建不同的mobile数据连接类型。


以上是针对apn处理的基本介绍以及定位于源代码的位置,所有android代码都可以在grepcode.com 中找到,
便于被墙时使用,在这里,提高技术也是一个极度艰难的过程,更不要说创新,赶什么超什么了...


针对我不贴源码的原因是2条:
1. 这些源码不是我写的,我把位置显示出来,大家可以看到最本源的内容,更可靠
2. 这些内容都是android自带的源码,理解起来不难
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值