• android设备内部添加apn信息


      由于工作原因今天需要给多台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/
    //'`
     //``符号是键盘上数字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/ //` 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.重启设备即可

  • 相关阅读:
    C#开源爬虫NCrawler源代码解读以及将其移植到python3.2(3)
    C#开源爬虫NCrawler源代码解读以及将其移植到python3.2(2)
    C#开源爬虫NCrawler源代码解读以及将其移植到python3.2(1)
    python将项目文件打包发布的脚本(保留原来的项目结构)
    .net stream 转成 bytes[] 的实例和注意事项
    大区间素数筛选(POJ 2689)
    B. Duff in Love
    A. Duff and Meat
    NEFU_117素数个数的位数
    HDU_5504 GT and sequence
  • 原文地址:https://www.cnblogs.com/danielStudy/p/6531382.html
Copyright © 2020-2023  润新知