由于工作原因今天需要给多台android设备中写入某张sim卡的apn相关信息,虽然可以通过sqlite命令写sql语句来写入到设备中,但设备一多起来就太低效了,所以在学习的过程中摸索着写了一个将apn信息内置到设备中的脚本,具体过程如下:

1.首先需要进入到android设备中,然后获取设备的root权限

1 adb shell
2 su

注意:如果提示没有adb的消息则代表系统中没有安装adb,可以使用下面命令进行安装:

1 sudo apt-get install android-tools-adb

2.使用下面命令来查询准备写入的sim信息是否存在

1 content query --uri content://telephony/carriers --where "numeric='运营商编码' and apn='目标 apn'"

注意:运营商编码就是例如“46001”之类的,目标apn则是“3gnet”之类的,想必你要写入apn信息的话这些都应该是已知的

3.经过上面的查询,如果出现“No result found.”则表示没有相关的信息,就需要将apn信息插入到设备中,命令如下:

content insert --uri content://telephony/carriers --bind name:s:"title" --bind numeric:s:"46001" --bind type:s:"default,sulp" --bind mcc:i:460 --bind mnc:s:"01" --bind apn:s:"apn信息"  --bind user:s:"" --bind password:s:""

解析:上述命令是将后半部的信息插入到设备中,比较重要的只有4处,分别是numeric、mcc、mnc、apn。拿--bind name:s:"title"和46001信息来举例说明,name是当条信息的key值,比如:name(这个随意写,但一般和apn保持一致,就是一个title)、numeric(就是运营商编码,比如联通的46001)、mcc(运营商编码的前3位,例如460)、mnc(运营商编码的后两位比如01)还有apn(就是apn的信息,例如3gnet),user和password可以为空,其余的都是默认值即可

4.执行完插入应该再次执行step2来检查是否插入成功,如果成功了则可以进行下一步

5.此时设备中已经存有了插入的apn信息,经实际测试,此时设备已经可以使用放入的apn信息。由于本人的工作需要是将脚本放入设备中执行,所以省略掉了adb shell 命令,如果您的需求实在设备外部执行则需要添加adb,不同之处我会在()中添加相关命令

 1 queryResult='No result found.'//定义一个查询不存在信息的结果返回值
 2 (adb wait-for-device //等待adb,直到adb shell 可用)
 3 resultFirst=`(adb shell)content query --uri content://telephony/carriers --where "numeric='46001' and apn='3gnet'" | busybox sed 's/\r/\0/'`  //``符号是键盘上数字1左边的~键,本条命令是查询numeric和apn符合条件的信息,由于查询结果的尾部会有不可见字符,设备内无法使用tr替换,所以这里使用了busybox sed命令将不可见字符替换
 4 if [ "$resultFirst"x = "$queryResult"x ];then//判断查询结果是否等于“No result found”,x是规避掉变量为空的情况
 5     echo "Add target apn info!"//如果信息不存在则insert
 6     `content insert --uri content://telephony/carriers --bind name:s:"3gnet" --bind numeric:s:"46001" --bind type:s:"default,sulp" --bind mcc:i:460 --bind mnc:s:"01" --bind apn:s:"3gnet"  --bind user:s:"" --bind password:s:""`
 7 else
 8     echo "Alreay have target apn!"//信息存在的话则不需要插入,退出程序即可
 9     exit -1
10     fi
11  //插入信息之后还需要验证一下,所以此处再次查询
12 resultSecond=`content query --uri content://telephony/carriers --where "numeric='46001' and apn='3gnet'" | busybox sed 's/\r/\0/`
13 if [ "$resultSecond"x = "$queryResult"x ];then
14     echo "Insert target apn info faild."//判断信息是否插入成功,不成功则提示插入失败,退出程序,后续根据需求自行处理
15     exit -1
16 else
17     echo "Insert apn success"//插入成功
18 fi

注意:自测步骤:查询当前设备的preferapn信息,并将设备中的所有numeric和apn信息等于preferapn的记录删除掉,然后重启设备,此时设备应该无法工作,然后执行脚本,将测试数据插入设备,重启设备,设备应该恢复正常,查询插入数据和preferapn,应该就是刚刚插入的apn信息,删除数据的命令如下:

1 content delete --uri content://telephony/carriers --where "numeric='46001' and apn='3gnet'"

6.重启设备之后即可使用该apn信息,看到还有说插入preferapn信息的,我也验证过,但我发现在我的设备中在插入apn信息重启设备之后,设备的preferapn信息自动替换掉了,但这里还是把perferapn的相关命令记录下。

1 content query --uri content://telephony/carriers/preferapn //查询preferapn的信息2 content insert --uri content://telephony/carriers/preferapn --bind apn_id:i:****  //此命令是将上面插入的apn信息插入到preferapn中,step2的查询得到的结果中有一个字段为_id,将该apn信息的_id填入此处,即可将该id对应的信息插入到preferapn中

7.重启设备即可

转载于:https://www.cnblogs.com/danielStudy/p/6531382.html

android设备内部添加apn信息相关推荐

  1. android进入wifi权限,判断android设备wifi连接状态,判断android设备wifi,添加访问权限(Andro...

    判断android设备wifi连接状态,判断android设备wifi,添加访问权限(Andro 添加访问权限(AndroidManifest.xml文件里) ```Java代码(MainActivi ...

  2. android 自定义声音,如何在Android设备中添加自己的自定义声音

    大多数人在获得新手机后要做的第一件事就是更改铃声.根据制造商的不同,更改警报音,消息音和铃声的选项也有所不同. 如果您不喜欢预装的铃声,则可以根据需要从计算机上更改它.如果您已经将喜欢的铃声存储在计算 ...

  3. 如何查看Android设备上的分区信息

    Android设备上,一般都会存在一块eMMC存储芯片来存放系统和用户数据,甚至部分的引导程序. 一般设备出厂时,各个厂商都会将这块存储芯片分成很多的分区,每个分区内存放不同的内容.具体分区的布局每个 ...

  4. android源码已关联设备,获取android设备已安装应用信息

    本文将介绍如何获取设备中已经安装的应用信息,包括:应用名称.包名.图标等. 获得信息列表后,选择某一项记录还可以启动对应的应用! 1.代码实现 package com.example.showappl ...

  5. adb 查看gpu_获取android 设备的cpu gpu信息 mac地址

    1.获取cpu信息:cpu信息存在于/proc/cpuinfo文件下,adb shell 进去后用 cat /proc/cpuinfo 可以查看 private String getCpuInfo() ...

  6. android apn切换工具,Android修改和添加APN网络

    由于工作中需要用到网络的判断和APN的切换,研究了一下Android中APN的修改和切换,关于APN的基础知识,这里就不在介绍了,自己百度就行! 直接进入正题: 1.建立一个android工程,需要如 ...

  7. linux 添加spi 驱动,Linux下SPI和IIC驱动免在设备树上添加设备信息的编写方法

    编写驱动时,一般需要往设备树上添加节点信息,这里提供一种直接在驱动中添加设备信息的方法. i2c的驱动模板如下 #include #include #define SENSOR_BUS_NUM 0 # ...

  8. android自动获取位置,Android中获取当前位置信息

    这篇教程主要介绍了在Android平台上如何使用服务完成定位功能.众所周知,Android设备的当前位置信息,对开发创新性App.解决人们日常生活问题有极大帮助.在Android平台开发定位相关的应用 ...

  9. adb 发送文件到Android设备和从Android手机复制文件

    一,adb push (PC到Android设备) 1,通过adb 连接(WiFi连接或者数据线连接)Android设备 2,PC端进入命令窗口(win +R 组合键后,输入cmd) 3,adb pu ...

最新文章

  1. solr学习二(ExtractingRequestHandler)
  2. Sigmoid函数与逻辑回归
  3. 周围剃光头顶留长发型_为啥很多头顶光光的人,宁愿留周围一圈头发,也不剃成光头呢?...
  4. centos 6 安装zabbix 3.0
  5. matlab2016a 问题及解决方法记录
  6. pom文件中配置阿里远程仓库
  7. 3dmax渲染大图的过程中自动关闭怎么回事?
  8. c++取模运算/求余运算
  9. 自定义chromium浏览器
  10. mqtt 传文件断开连接的原因_MQTT系列 | MQTT的连接和断开
  11. 1离线TiDB-Ansible 部署问题-总结
  12. Context R-CNN一种基于注意力机制的视频检测算法
  13. PRML系列:1.5 Decision Theory
  14. html表格分行分列,excel表格内怎样设置分行和分列
  15. 小程序自动化测试框架原理剖析
  16. 把html页面转换为pdf
  17. java学习之破壳hello world
  18. 从小米应用商店爬取APK文件
  19. Python识别条码内容
  20. pytroch获取中间变量/feature

热门文章

  1. 用计算机计算应该注意什么,多功能计算器的使用方法及注意事项
  2. .NET项目报受源代码管理,向源代码管理注册此项目时出错的解决方案
  3. 解压jar包修改配置文件,解压、修改、压缩、运行
  4. 十次方:服务器的1U、2U、U代表什么意思?
  5. 惠普暗影精灵8和惠普暗影精灵8 Plus 评测
  6. 3个方法提高电脑运行速度,亲测有效!
  7. 魔兽世界开服教程——魔兽世界服务器架设全攻略---战网+Ladder排行版
  8. (微信小程序)页面导航
  9. 【人工智能】谓词表示法与产生式知识表示实验
  10. 台大·林轩田·机器学习基石·第二讲