android7.1 添加预置的APN信息

android7.1 添加预置的APN信息


1. APN
APN,Access Point Name,接入点名称。Android设备里预置了很多APN信息,一般情况无需关心,可以直接匹配。但有可能会遇到无别识别特定或是新的物联网卡。这就需要预置一个对应的APN才能工作(apn一般由运营商提供)。APN(Access Point Name)数据预置在/system/etc/apns-conf.xml中。


对于高通平台,vendor\qcom\proprietary\common\config\device-vendor.mk定义了/system/etc/apns-conf.xml的来源
XML_CONF_PATH := vendor/qcom/proprietary/telephony-apps/etc
PRODUCT_COPY_FILES := $(XML_CONF_PATH)/apns-conf.xml:system/etc/apns-conf.xml $(PRODUCT_COPY_FILES)


2. APN加载过程
2.1 系统检查到SIM卡正常后从/system/etc/apns-conf.xml解析数据,存放到数据telephony.db
/data/user_de/0/com.android.providers.telephony/database目录下有telephony.db和telephony.db-journal
/data/user_de/0/com.android.providers.telephony/databases/telephony.db


telephony.db是telephony provide的数据库
用SQLiteSpy打开telephony.db-journal的时候提示不是数据库文件

 


打开telephony.db部分内容如下,该数据库中有一个carriers数据表,存储了全球各地电信运营商的接入点配置信息

 
2.2 telephony.db数据库的建立
对应TelephonyProvider.java文件
(1) 创建数据库
 
(2) 获取/system/etc/apns-conf.xml文件
 
(3) 把从xml文件得到的APN信息添加到数据库db中。
在private void initDatabase(SQLiteDatabase db)中实现
 


因为RIL层在初始化拨号的时候会从sim卡中读取apn,然后把读出的apn和预先数据库中的apn对比,如果匹配就按照数据库的信息去拨号


3. 添加APN信息
vendor/qcom/proprietary/telephony-apps/etc/apns-conf.xml添加需要的apn信息,比如最近公司采购一种移动物联网卡,需要增加下面的apn信息才可以正常使用:
<apn carrier="China Mobile"
      apn=" cmiot"
      mcc="460"
      mnc="04"
      user=""
      server=""
      password=""
      proxy=""
      port=""
      mmsproxy=""
      mmsport=""
      mmsc=""
      type="default,net,supl"
      preferred="true"
      localized_name="APN_NAME_CMNET"
      protocol="IPV4V6"
      roaming_protocol="IPV4V6"/>
其实这里就是在其他移动apn信息上,增加一项,并把apn="cmnet"改为apn="cmiot".


通过QXDM 工具,查看SIM卡在注册 时的空口(空中接口,基站与终端的交互过程中的信息)信息,SIM卡在注册 的时候,会跟基站进行多次的交互,将SIM卡的信息发给基站。基站收到信息会将消息发回到终端,这些信息就带有apn,mcc ,mnc,这些信息与终端的APN config列表进行匹配,如果匹配上了,那么就能正常注册网络,如果匹配不上,那么就上不了网。遇到类似的问题,首先就要查看APN的配置是否正确。至于 如何查看,这个需要了解卡的mnc mcc。然后再在设置,更多,移动网络设置,APN设置下,添加一个APN。最后再进行验证。


打开db后可通过select * from carriers where apn like 'cmiot';
来查询添加的是否在db中。


增加apn信息的xml测试验证方法:
(1) Push到设备端
adb push apns-conf.xml /system/etc/
rm /data/user_de/0/com.android.providers.telephony/databases/telephony.db
重启即可,此方法,如果是用OTA升级包方式,需要把apns-conf.xml放在OTA包的/system/etc/目录下。删除telephony.db的动作可在updater-script文件中添加:
delete_recursive("/data/user_de/0/com.android.providers.telephony/databases/telephony.db ");来删除


(2) 手动重置APN
设置---》无线和网络---》移动网络---》接入点名称(APN),选择右上角“重置为默认配置”,这样就会重置APN列表。 


参考:
Android N TelephonyProvider及数据库初始化
https://blog.csdn.net/u012724237/article/details/74755357

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
机器学习是一种人工智能(AI)的子领域,致力于研究如何利用数据和算法让计算机系统具备学习能力,从而能够自动地完成特定任务或者改进自身性能。机器学习的核心思想是让计算机系统通过学习数据中的模式和规律来实现目标,而不需要显式地编程。 机器学习应用非常广泛,包括但不限于以下领域: 图像识别和计算机视觉: 机器学习在图像识别、目标检测、人脸识别、图像分割等方面有着广泛的应用。例如,通过深度学习技术,可以训练神经网络来识别图像中的对象、人脸或者场景,用于智能监控、自动驾驶、医学影像分析等领域。 自然语言处理: 机器学习在自然语言处理领域有着重要的应用,包括文本分类、情感分析、机器翻译、语音识别等。例如,通过深度学习模型,可以训练神经网络来理解和生成自然语言,用于智能客服、智能助手、机器翻译等场景。 推荐系统: 推荐系统利用机器学习算法分析用户的行为和偏好,为用户推荐个性化的产品或服务。例如,电商网站可以利用机器学习算法分析用户的购买历史和浏览行为,向用户推荐感兴趣的商品。 预测和预测分析: 机器学习可以用于预测未来事件的发生概率或者趋势。例如,金融领域可以利用机器学习算法进行股票价格预测、信用评分、欺诈检测等。 医疗诊断和生物信息学: 机器学习在医疗诊断、药物研发、基因组学等领域有着重要的应用。例如,可以利用机器学习算法分析医学影像数据进行疾病诊断,或者利用机器学习算法分析基因数据进行疾病风险预测。 智能交通和物联网: 机器学习可以应用于智能交通系统、智能城市管理和物联网等领域。例如,可以利用机器学习算法分析交通数据优化交通流量,或者利用机器学习算法分析传感器数据监测设备状态。 以上仅是机器学习应用的一部分,随着机器学习技术的不断发展和应用场景的不断拓展,机器学习在各个领域都有着重要的应用价值,并且正在改变我们的生活和工作方式。
要修改Android设备的APN(接入点)信息,你可以使用`ContentResolver`和`ContentValues`来更新APN数据库中的数据。 以下是一个示例,展示如何使用Kotlin修改APN信息: ```kotlin import android.content.ContentResolver import android.content.ContentValues import android.net.Uri fun updateApnSettings(contentResolver: ContentResolver, apnId: Long, apnName: String, apnType: String, apnProxy: String, apnPort: String) { val contentValues = ContentValues().apply { put("apn", apnName) put("type", apnType) put("proxy", apnProxy) put("port", apnPort) } val updateUri = Uri.parse("content://telephony/carriers/$apnId") contentResolver.update(updateUri, contentValues, null, null) } ``` 在上面的示例中,`updateApnSettings()`函数接受一个`ContentResolver`对象、APN的ID、要修改的APN名称、APN类型、APN代理和APN端口作为参数。它使用`ContentValues`对象来存储要更新的APN数据。 然后,我们通过将APN的ID附加到`content://telephony/carriers/`URL上来构建要更新的APN的URI。最后,我们使用`ContentResolver`的`update()`方法来执行更新操作。 以下是如何使用上述示例中的函数来更新APN信息: ```kotlin val contentResolver = context.contentResolver val apnId = 12345L // 要修改的APN的ID val apnName = "New APN Name" val apnType = "default" val apnProxy = "proxy.example.com" val apnPort = "8080" updateApnSettings(contentResolver, apnId, apnName, apnType, apnProxy, apnPort) ``` 在上面的示例中,我们首先获取一个`ContentResolver`对象,然后指定要修改的APN的ID、新的APN名称、APN类型、APN代理和APN端口。最后,我们调用`updateApnSettings()`函数来更新APN信息。 请注意,修改APN信息可能需要特定的权限(例如,WRITE_APN_SETTINGS权限),请确保你的应用程序具有所需的权限。 希望这个示例能帮助你修改Android设备的APN信息!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loongembedded

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值