Android4.0以上版本添加APN

在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


猜你喜欢

转载自blog.csdn.net/keep_moving12138/article/details/79758423