Android代码设置APN

什么是APN?

APN(Access Point Name)中文全称叫接入点。APN指一种网络接入技术,是通过手机上网时必须配置的一个参数,它决定了手机通过哪种接入方式来访问网络。APN用来标识GPRS的业务种类,目前分为两大类:CMWAP(通过GPRS访问WAP业务)、CMNET(除了WAP以外的服务目前都用CMNET,比如连接因特网等)。

APN手机里的位置

不同手机可能位置不一样,我使用的测试机是红米3S,位置是:设置->双卡和移动网络->接入点名称。或者可以直接在设置里直接搜索“APN”。我是在测试的时候才需要来这里看动态添加APN是否成功。

这里需要提前说明,代码实现设置APN需要程序拥有系统权限,如何拥有系统权限呢?你需要去找个工具给自己用AS build的apk进行系统签名,这种系统签名工具我之前在CSDM上看到过,如果需要的话可以去搜一下。另一点就是需要SIM卡,如果测试机没有SIM卡的话就没办法进行这方面的测试了。

Android系统中,对于APN网络的API是隐藏的,因此获取手机的APN设置,需要通过ContentProvider来进行数据库查询,查询的URI地址是:
取得全部的APN列表:content://telephony/carriers;
取得当前设置的APN:content://telephony/carriers/preferapn;
取得current=1的APN:content://telephony/carriers/current;

下面是代码实现简单介绍:
通过cr这个游标对象可以进行手机里面APN信息的查询,下面代码中的“ErrorApplication.getContext()”其实只是一个context对象,我实际代码中是这样写,把它换成其他合适的this或者你需要的context对象都可以。
// 检查当前连接的APN

Cursor cr = ErrorApplication.getContext().getContentResolver().query(APN_URI, null, null, null, null);
        while (cr != null && cr.moveToNext()) {
    if(cr.getString(cr.getColumnIndex("apn")).equals("abc")){
                APN.hasAPN=true;
                break;
            }
        }
    }

获取SIM卡信息:APN中的某些属性在这些信息里面

protected String getSIMInfo() {
    TelephonyManager iPhoneManager = (TelephonyManager) ErrorApplication.getContext()
            .getSystemService(Context.TELEPHONY_SERVICE);
    return iPhoneManager.getSimOperator();
}

添加接入点:

public int addAPN() {
        int id = -1;
        String NUMERIC = getSIMInfo();
        if (NUMERIC == null) {
            return -1;
        }
        ContentResolver resolver = ErrorApplication.getContext().getContentResolver();
        ContentValues values = new ContentValues();
        values.put("name", "专用APN");                                  //apn中文描述
        values.put("apn", "unim2m.njm2mapn1");                                     //apn名称
        values.put("type", "default");                            //apn类型
        values.put("numeric", NUMERIC);
        values.put("mcc", NUMERIC.substring(0, 3));
        values.put("mnc", NUMERIC.substring(3, NUMERIC.length()));
        values.put("proxy", "");                                        //代理
        values.put("port", "");                                         //端口
        values.put("mmsproxy", "");                                     //彩信代理
        values.put("mmsport", "");                                      //彩信端口
        values.put("user", "");                                         //用户名
        values.put("server", "");                                       //服务器
        values.put("password", "");                                     //密码
        values.put("mmsc"<
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要修改Android设备的APN(接入点)信息,你可以使用`ContentResolver`和`ContentValues`来更新APN数据库中的数据。 以下是一个示例,展示如何使用Kotlin修改APN信息: ```kotlin import android.content.ContentResolver import android.content.ContentValues import android.net.Uri fun updateApnSettings(contentResolver: ContentResolver, apnId: Long, apnName: String, apnType: String, apnProxy: String, apnPort: String) { val contentValues = ContentValues().apply { put("apn", apnName) put("type", apnType) put("proxy", apnProxy) put("port", apnPort) } val updateUri = Uri.parse("content://telephony/carriers/$apnId") contentResolver.update(updateUri, contentValues, null, null) } ``` 在上面的示例中,`updateApnSettings()`函数接受一个`ContentResolver`对象、APN的ID、要修改的APN名称、APN类型、APN代理和APN端口作为参数。它使用`ContentValues`对象来存储要更新的APN数据。 然后,我们通过将APN的ID附加到`content://telephony/carriers/`URL上来构建要更新的APN的URI。最后,我们使用`ContentResolver`的`update()`方法来执行更新操作。 以下是如何使用上述示例中的函数来更新APN信息: ```kotlin val contentResolver = context.contentResolver val apnId = 12345L // 要修改的APN的ID val apnName = "New APN Name" val apnType = "default" val apnProxy = "proxy.example.com" val apnPort = "8080" updateApnSettings(contentResolver, apnId, apnName, apnType, apnProxy, apnPort) ``` 在上面的示例中,我们首先获取一个`ContentResolver`对象,然后指定要修改的APN的ID、新的APN名称、APN类型、APN代理和APN端口。最后,我们调用`updateApnSettings()`函数来更新APN信息。 请注意,修改APN信息可能需要特定的权限(例如,WRITE_APN_SETTINGS权限),请确保你的应用程序具有所需的权限。 希望这个示例能帮助你修改Android设备的APN信息!如果还有其他问题,请随时提问。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值