Android4.0以上版本添加APN

本文介绍如何在Android设备上通过root权限修改APN配置。包括使用ADB操作apns-conf.xml文件,以及删除telephony数据库来使系统重新生成APN设置的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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.youkuaiyun.com/download/keep_moving12138/10318129


public String getCurrentApnConfig() { //Uri APN_TABLE_URI = Uri.parse("content://telephony/carriers/preferapn"); Cursor cr = getContentResolver().query(CURRENT_APN_URI, null, null, null, null); String[] mStrings = new String[cr.getCount()]; int i = 0; StringJoiner joiner = new StringJoiner(";", "",""); while (cr != null && cr.moveToNext()) { String name = cr.getString(cr.getColumnIndexOrThrow("name")); String apn = cr.getString(cr.getColumnIndexOrThrow("apn")); String numeric = cr.getString(cr.getColumnIndexOrThrow("numeric")); String mcc = cr.getString(cr.getColumnIndexOrThrow("mcc")); String mnc = cr.getString(cr.getColumnIndexOrThrow("mnc")); String user = cr.getString(cr.getColumnIndexOrThrow("user")); String password = cr.getString(cr.getColumnIndexOrThrow("password")); mStrings[i] = array2JsonString(new String[]{name, apn, numeric, mcc, mnc, user, password}); /*mStrings[i] = "ID:" + cr.getString(cr.getColumnIndexOrThrow("_id")) + "\n" + "name:" + cr.getString(cr.getColumnIndexOrThrow("name")) + "\n" + "numeric:" + cr.getString(cr.getColumnIndexOrThrow("numeric")) + "\n" + "mcc:" + cr.getString(cr.getColumnIndexOrThrow("mcc")) + "\n" + "mnc:" + cr.getString(cr.getColumnIndexOrThrow("mnc")) + "\n" + "apn:" + cr.getString(cr.getColumnIndexOrThrow("apn")) + "\n" + "user:" + cr.getString(cr.getColumnIndexOrThrow("user")) + "\n" + "server:" + cr.getString(cr.getColumnIndexOrThrow("server")) + "\n" + "password:" + cr.getString(cr.getColumnIndexOrThrow("password")) + "\n" + "proxy:" + cr.getString(cr.getColumnIndexOrThrow("proxy")) + "\n" + "port:" + cr.getString(cr.getColumnIndexOrThrow("port")) + "\n" + "mmsproxy:" + cr.getString(cr.getColumnIndexOrThrow("mmsproxy")) + "\n" + "mmsport:" + cr.getString(cr.getColumnIndexOrThrow("mmsport")) + "\n" + "mmsc:" + cr.getString(cr.getColumnIndexOrThrow("mmsc")) + "\n" + "authtype:" + cr.getString(cr.getColumnIndexOrThrow("authtype")) + "\n" + "type:" + cr.getString(cr.getColumnIndexOrThrow("type")) + "\n" + "current:" + cr.getString(cr.getColumnIndexOrThrow("current"));*/ Log.d(TAG, "abc: "+ mStrings[i]); joiner.add(mStrings[i]); i++; } return joiner.toString(); } public boolean setCurrentApnConfig(String values) { String[] split = values.split(";"); ContentValues[] mContentValues = new ContentValues[split.length]; int i = 0; for (String apnConfig : split) { String[] config = jsonString2Array(apnConfig); mContentValues[i] = getApnValue(config); i++; } getContentResolver().bulkInsert(APN_TABLE_URI, mContentValues); return true; } public ContentValues getApnValue(String[] config) { ContentValues value = new ContentValues(); value.put("name", config[0]); value.put("apn", config[1]); value.put("numeric", config[2]); value.put("mcc", config[3]); value.put("mnc", config[4]); value.put("user", config[5]); value.put("password", config[6]); value.put("current", "1"); return value; }代码分析
最新发布
03-18
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值