在apns-conf文件中配置一个read_only字段,使APN不可被编辑
如果有需要在apns-conf中配置一个新的read_only字段,并使其生效,比如使得APN不可被编辑。可以最如下的修改。
一、使新添加的字段能成功的读取到telephony.db数据库中
1、TelephonyProvider.java文件中的createCarriersTable方法中添加如下代码:
     EDITED + " INTEGER DEFAULT " + UNEDITED + "," +
 USER_VISIBLE + " BOOLEAN DEFAULT 1);";
修改为:
  EDITED + " INTEGER DEFAULT " + UNEDITED + "," +
       READ_ONLY + " BOOLEAN DEFAULT 0," +     //添加这一句
 USER_VISIBLE + " BOOLEAN DEFAULT 1);";

2、Telephony.java中添加如下一句:
   public static final String USER_VISIBLE = "user_visible";

@hide      //参照USER_VISIBLE ,不能忽略hide
public static final String READ_ONLY = "read_only";   //添加这句

3、在TelephonyProvider.java文件中的getRow()方法中添加如下代码
    addBoolAttribute(parser, "carrier_enabled", map, CARRIER_ENABLED);
    addBoolAttribute(parser, "modem_cognitive", map, MODEM_COGNITIVE);
  addBoolAttribute(parser, "user_visible", map, USER_VISIBLE);
++    addBoolAttribute(parser, "read_only", map, READ_ONLY);  //添加这一句

4、还请在TelephonyProvider.java文件中的onUpgrade方法中添加如下代码:
if (oldVersion < (18 << 16 | 6)) {
     try {
  // Try to update the siminfo table. It might not be there.
  db.execSQL("ALTER TABLE " + SIMINFO_TABLE + " ADD COLUMN " +
  SubscriptionManager.SIM_PROVISIONING_STATUS + " INTEGER DEFAULT " +
  SubscriptionManager.SIM_PROVISIONED + ";");
  } catch (SQLiteException e) {
  if (DBG) {
 log("onUpgrade skipping " + SIMINFO_TABLE + " upgrade. " +
 " The table will get created in onOpen.");
 }
 }
 oldVersion = 18 << 16 | 6;
 }
++if(oldVersion < (19 << 16 | 6)){
++ try {
++ db.execSQL("ALTER TABLE " + CARRIERS_TABLE +
++ " ADD COLUMN read_only BOOLEAN DEFAULT 0;");
++ Log.d(TAG, "Update read_only column");
++ } catch (SQLException e) {
++ e.printStackTrace();
++ Log.e(TAG, "Add read_only column fail with table " + CARRIERS_TABLE + ".");
++ }
++ log("Add Read_only ");
++ oldVersion = 19 << 16 | 6;
++}
5、OTA升级时,upgrade 相应的DATABASE_VERSION。

二、从数据库中读取出对应字段,并判断
1、ApnSettings.java中添加如下静态常量
  private static final int SOURCE_TYPE_INDEX = 6;
++  private static final int READ_ONLY_INDEX = 7;

2、filllist()方法中修改查询条件
  Cursor cursor = getContentResolver().query(
  Telephony.Carriers.CONTENT_URI,
  new String[] { "_id", "name", "apn", "type", "mvno_type", "mvno_match_data",
  "sourcetype" }, where, null, order);
修改为:
Cursor cursor = getContentResolver().query(
Telephony.Carriers.CONTENT_URI,
new String[] { "_id", "name", "apn", "type", "mvno_type", "mvno_match_data",
"sourcetype", "read_only" }, where, null, order);

3、根据数据库中读取的值,修改APN能否被编辑的判断条件
414 /// M: for [Read Only APN]
415 pref.setApnEditable(mApnExt.isAllowEditPresetApn(type, apn, mccmnc, sourcetype));
修改为:
boolean isEdit = mApnExt.isAllowEditPresetApn(type, apn, mccmnc, sourcetype);   //true 表示允许编辑
boolean isReadOnly = cursor.getInt(READ_ONLY_INDEX) < 1;   //true表示允许编辑
pref.setApnEditable(isEdit && isReadOnly);

Android 系统(165)---在apns-conf文件中配置一个read_only字段,使APN不可被编辑相关推荐

  1. Linux内核错误(引导系统)Deepin用户手册在/etc/sysctl.conf文件中加入kernel.panic = 20,在/etc/sysctl.conf中kernel.sysrq=1内存

    Linux内核错误(引导系统)- 系统管理 -Deepin深度系统用户手册 Power By Baidu Ai 00:00 00:00 目录 1 简介 2 问题分析 3 案例分析 此文章约为4327字 ...

  2. Android系统的分区及img文件、移植烧写过程

    一.引言 本章介绍Android的几个分区,已经编译后生成的.img镜像文件,对于大家移植整个Android有一定的帮助.本人也首次接触Android,有不正确的地方,欢迎指正! 二.Android的 ...

  3. android中的BitMap(二)从网络和资源文件中获得一个BitMap

      //取得网络上图片资源的路径 String urlstring="http://img.wallba.com/Public/Upload/Image/qichebizi/ asidunm ...

  4. android 读build.prop,Android系统下的build.prop文件

    Android系统下的build.prop文件,用adb shell进入,再进入到system目录,查看该目录下的文件,会看到build.prop文件,用exit命令退出. 1551927518(1) ...

  5. android xml 小圆点,如何在android xml可绘制文件中定义一个圆形状?

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 我有一些问题找到Android的XML的形状定义的文档.我想在XML文件中定义一个简单的填充了纯色的圆圈,将其包含到我的 ...

  6. 基类和派生类写在一个文件中_BootISO:从 ISO 文件中创建一个可启动的 USB 设备...

    今天,我们将讨论名为 BootISO 的实用程序类似工具.它是一个简单的 bash 脚本,允许用户来从 ISO 文件中创建一个可启动的 USB 设备. -- Prakash Subramanian(作 ...

  7. 如何在另一个JavaScript文件中包含一个JavaScript文件?

    JavaScript中是否有类似于CSS中@import的内容,可让您在另一个JavaScript文件中包含一个JavaScript文件? #1楼 而不是在运行时添加,而是使用脚本在上传之前进行串联. ...

  8. Tomcat在自定义xml文件中配置虚拟目录

    在实际开发中,如果,经常在server.xml文件中,配置虚拟目录会有一个弊端 就是,每次修改server.xml文件之后,想要文件生效,必须重新启动Tomcat服务器 为了解决这个问题,可以采用另外 ...

  9. BootISO:从 ISO 文件中创建一个可启动的 USB 设备

    为了安装操作系统,我们中的大多数人(包括我)经常从 ISO 文件中创建一个可启动的 USB 设备.为达到这个目的,在 Linux 中有很多自由可用的应用程序.甚至在过去我们写了几篇介绍这种实用程序的文 ...

最新文章

  1. 修复阻止程序安装或删除的问题
  2. iOS进阶之架构设计MVVM的实现示例(4)
  3. Autodesk 360 Mobile不能显示图片?
  4. android中gradle的作用,Gradle 之 Android 中的应用
  5. 遍历Map keySet和entrySet
  6. mysql 查看数据表大小_关于MySQL 查询表数据大小的总结
  7. UBuntu CMake工程配置基础
  8. 极点五笔常用操作及快捷键功能描述(v6.5)
  9. php获取客户端的真实IP的方法
  10. win10 jungo windriver
  11. php中x22是什么意思,我想问一下:联想s22e和x22区别哪款好用点??真实反馈一下!!...
  12. 210705学习笔记(cucumber@ruby)
  13. Sort By、Distribute By 使用说明书
  14. angular cli + primeNG
  15. 草料生成app自动下载的二维码
  16. SVG - 在Android中使用矢量图全攻略
  17. 排他思想 -- 百度换肤效果案例 以及 点击某按钮只是该按钮变色
  18. 空间权重矩阵与相关性检验(Stata)
  19. 基于FPGA的FIR调试
  20. 美丽链——通过买套内衣读懂“区块链”?

热门文章

  1. 从程序员到项目经理(11):每个人都是管理者
  2. mysql 两行的差异_MySQL两行之间的日期差异
  3. tcp与udp的socket编程,udp代码实现客户端服务端,tcp代码实现客户端服务端(单线程、多线程、多进程分别实现),三次握手
  4. Python学习---入门导学篇
  5. mysql数据库之运行时其他报错
  6. mysql ubuntu 注意点
  7. 持续集成Jenkins
  8. kubespray容器化部署kubernetes高可用集群
  9. yeomanbower
  10. 小记css的margin collapsing