在Android4.0以前,我们可以申请权限然后再通过内容提供者进行对apn表进行修改。
我们在去操作这个表的时候就会发现没有write——apns的权限??
那就去配置权限呗!然而我们去添加权限的时候系统提示只有系统级应用才能申请。
那就把应用升级成系统级的???
注明系统应用,移到system/app下,然而并不行。
神奇!机器是Root过的,为什么没有权限?为什么!
看来只能更换思路了,这个表不能操作,那就删了!让系统自动生成
我们要修改apns.confi.xml文件,如果是有源码环境,可以直接修改,但是如果没有,那就要用adb进行操作了。
首先:机器是要root过的。
接着:修改该文件(先修改文件,再替换到system.etc下)
继续:删除telephony表
最后重启
adb可以了,看看怎么用代码把上面几个步骤实现吧:
String filePath = "etc/apns-conf.xml"; // 系统文件路径 String writePath= Environment.getExternalStorageDirectory().toString()+"/apns-conf.xml"; //中间文本路径 //修改文件 write(writePath,read(filePath)); //获取权限 execRootCmdSilent("adb shell mount -o remount,rw /system"); //替换文件 execRootCmdSilent("adb push /storage/sdcard0/apns-conf.xml /system/etc"); //删除文件 execRootCmdSilent("rm /data/data/com.android.providers.telephony/databases/telephony.db"); execRootCmdSilent("rm /data/data/com.android.providers.telephony/databases/telephony.db-journal"); //重启设备 execRootCmdSilent("reboot");
好了。这时就可以修改了。哈哈哈哈!!
什么?
execRootCmdSilent()???这个是什么方法呢?
拿走不谢
public static int execRootCmdSilent(String cmd) { int result = -1; DataOutputStream dos = null; try { Process p = Runtime.getRuntime().exec("su"); dos = new DataOutputStream(p.getOutputStream()); dos.writeBytes(cmd + "\n"); dos.flush(); dos.writeBytes("exit\n"); dos.flush(); p.waitFor(); result = p.exitValue(); } catch (Exception e) { e.printStackTrace(); } finally { if (dos != null) { try { dos.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; }
等等,还有?
修改啥?
<apns>节点下第一条<apn>放入apn配置信息就好了。。
还不会?好吧。。不关我事了,看下图:
http://www.baidu.com(这是一张图片)
是什么让你们继续看下来??
是爱吗?是责任吗?
是因为你们懒!!
好吧,写好的都给你们
下载地址:https://download.csdn.net/download/keep_moving12138/10318129