android设备内部添加apn信息
由于工作原因今天需要给多台android设备中写入某张sim卡的apn相关信息,虽然可以通过sqlite命令写sql语句来写入到设备中,但设备一多起来就太低效了,所以在学习的过程中摸索着写了一个将apn信息内置到设备中的脚本,具体过程如下:
1.首先需要进入到android设备中,然后获取设备的root权限
adb shell
su
注意:如果提示没有adb的消息则代表系统中没有安装adb,可以使用下面命令进行安装:
sudo apt-get install android-tools-adb
2.使用下面命令来查询准备写入的sim信息是否存在
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:"" --bind type:s:"default,sulp" --bind mcc:i:460 --bind mnc:s:"" --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,不同之处我会在()中添加相关命令
queryResult='No result found.'//定义一个查询不存在信息的结果返回值
(adb wait-for-device //等待adb,直到adb shell 可用)
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命令将不可见字符替换
if [ "$resultFirst"x = "$queryResult"x ];then//判断查询结果是否等于“No result found”,x是规避掉变量为空的情况
echo "Add target apn info!"//如果信息不存在则insert
`content insert --uri content://telephony/carriers --bind name:s:"3gnet" --bind numeric:s:"" --bind type:s:"default,sulp" --bind mcc:i:460 --bind mnc:s:"" --bind apn:s:"3gnet" --bind user:s:"" --bind password:s:""`
else
echo "Alreay have target apn!"//信息存在的话则不需要插入,退出程序即可
exit -1
fi
//插入信息之后还需要验证一下,所以此处再次查询
resultSecond=`content query --uri content://telephony/carriers --where "numeric='46001' and apn='3gnet'" | busybox sed 's/\r/\0/`
if [ "$resultSecond"x = "$queryResult"x ];then
echo "Insert target apn info faild."//判断信息是否插入成功,不成功则提示插入失败,退出程序,后续根据需求自行处理
exit -1
else
echo "Insert apn success"//插入成功
fi
注意:自测步骤:查询当前设备的preferapn信息,并将设备中的所有numeric和apn信息等于preferapn的记录删除掉,然后重启设备,此时设备应该无法工作,然后执行脚本,将测试数据插入设备,重启设备,设备应该恢复正常,查询插入数据和preferapn,应该就是刚刚插入的apn信息,删除数据的命令如下:
content delete --uri content://telephony/carriers --where "numeric='46001' and apn='3gnet'"
6.重启设备之后即可使用该apn信息,看到还有说插入preferapn信息的,我也验证过,但我发现在我的设备中在插入apn信息重启设备之后,设备的preferapn信息自动替换掉了,但这里还是把perferapn的相关命令记录下。
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.重启设备即可
android设备内部添加apn信息的更多相关文章
- 如何查看Android设备上的分区信息
Android设备上,一般都会存在一块eMMC存储芯片来存放系统和用户数据,甚至部分的引导程序. 一般设备出厂时,各个厂商都会将这块存储芯片分成很多的分区,每个分区内存放不同的内容.具体分区的布局每个 ...
- 从Android设备中提取内核和逆向分析
本文博客链接:http://blog.csdn.net/qq1084283172/article/details/57074695 一.手机设备环境 Model number: Nexus 5 OS ...
- Android设备信息、感应器检测
近日产品已经上线,开始有时间来做自己的事情,于是就开始学习和巩固一些以前用过的或者学过的技术.昨天写了一个检测Android设备的序列号和IMEI以及感应器等等的一个Demo来跟大家分享一下. 在开发 ...
- 为Android设备添加A2SD支持
相信很多用Android设备的用户都有这个问题,内部存储太小导致应用只能装那么几个,虽然rom也有提供移动到sd卡的选项,但是仅仅是移动程序文件到sd卡,并不能解决多少问题,多装几个还是会 ...
- C#:基于WMI查询USB设备信息 及 Android设备厂商VID列表
/* ---------------------------------------------------------- 文件名称:WMIUsbQuery.cs 作者:秦建辉 MSN:splashc ...
- Android 向系统添加一个联系人信息contact
private void writeContacts() { Uri rawContacts = Uri.parse("content://com.android.contacts/raw_ ...
- Android开发过程中在sh,py,mk文件中添加log信息的方法
Android开发过程中在sh,py,mk文件中添加log信息的方法 在sh文件中: echo "this is a log info" + $info 在py文件中: print ...
- Android 设备,如何root,执行adb shell,查看设备中的数据库信息等【转】
原文地址: Android 设备,如何root,执行adb shell,查看设备中的数据库信息等
- 如何在Android Studio中添加注释模板信息?
如何在Android Studio中添加注释模板信息? 在开发程序的时候,我们一般都会给文件自动添加上一些关于文件的注释信息,比如开发者的名字,开发的时间,开发者的联系方式等等.那么在android ...
随机推荐
- 十七、SAP中使用SQL语句读取一条数据
一.需要说明的是SAP不同类型的结构体类型之间是不能随意赋值的,如果需要赋值,可以使用CORRESPONDING FIELDS OF关键字, 不同类型结构体中同名的成员会被赋值,代码如下: 二.输出代 ...
- 解决对路径bin\roslyn..的访问被拒绝
使用visual studio开发,一重新编译就会报错: 对路径“bin\roslyn\System.Reflection.Metadata.dll”的访问被拒绝 一开始的解决办法就是把bin下的文件 ...
- 代做Assignment时排比结构的使用解析
排比句式的作用想必各位留学生都不陌生,同理,在英文写作中,不管是从形式还是内容上来说,排比结构的作用都是强调.但是要注意,不能在分析的时候用太多这种套话,尽量还是能够根据具体情况具体分析.静态,小编将 ...
- Centos7.4 Storm2.0.0 + Zookeeper3.5.5 高可用集群搭建
想了下还是把kafka集群和storm集群分开比较好 集群规划: Nimbus Supervisor storm01 √ √ storm02 √(备份) √ storm03 √ 准备工作 老样子复制三 ...
- php srand()和rand()
1.rand()函数 作用:返回随机整数 用法:rand(min,max) min和max规定随机数产生的范围,可以省略不写,不写时rand() 返回 0 到 RAND_MAX 之间的伪随机整数. ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-barcode
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- Java高级特性——注解,这也许是最简单易懂的文章了
最近,浪尖在做flink的项目时source和sink的绑定那块用到了注解,当然新版本1.6以后就变为server load的方式加载. 但是浪尖也是觉得很有毕业讲一下注解,毕竟高级免试也会问答的吧. ...
- arm安装cuda9.0,tensorflow-gpu, jetson tx2安装Jetpack踩坑合集
因为要在arm(aarch64)架构的linux环境中安装tensorflow-gpu,但是官方tf网上没有对应的版本,所以我们找了好久,找到一个其他人编译好的tensorflow on arm的gi ...
- 腾讯电话面试总结(IEG后台开发)
1 Java面向对象:设计window画板的类框架.假设现在只有 直线.矩形.椭圆,怎么设计 2 Linux shell命令 定时怎么做 3 平时有问题经常访问那些网站 4 假设你现在是web网站 ...
- 为什么 execute(`echo 中文`) 输出中文源码?
为什么 execute(echo 中文) 输出中文源码? import win.ui; /*DSG{{*/ var winform = win.form(text="管道演示";r ...