获取andrid apn信息(转)

2024-01-10 08:38
文章标签 获取 信息 apn andrid

本文主要是介绍获取andrid apn信息(转),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文转自  http://www.cnmsdn.com/html/201008/1282371656ID7414_2.html

 

 

 

由于Android对于APN的网络API没有公开,不过我们可以阅读源代码,然后进行数据库操作,系统会自动监听数据库的变化,从而实现开启或者关闭APN。

  大家可以研究一下frameworks/base/core/java/android/provider/Telephony.java这个类,

  比较重要的就是 URI 和数据库字段: content://telephony/carriers

  字段可以在Telephony.java中找到。

  其实原理很简单 :

  1 、 当开启APN的时候,设置一个正确的移动或者联通的APN

  2、 关闭的时候设置一个错误APN就会自动关闭网络

  请看代码:Activity:

package com.yuan;import java.util.ArrayList;
import java.util.List;import com.yuan.util.APNMatchTools;import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;public class ApnTest extends Activity {/** Called when the activity is first created. */Uri uri = Uri.parse("content://telephony/carriers");public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);Button open= (Button) findViewById(R.id.open);Button close= (Button) findViewById(R.id.close);open.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {openAPN();}});close.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {closeAPN();}});}public void openAPN(){List<APN> list = getAPNList();for (APN apn : list) {ContentValues cv = new ContentValues();cv.put("apn", APNMatchTools.matchAPN(apn.apn));cv.put("type", APNMatchTools.matchAPN(apn.type));getContentResolver().update(uri, cv, "_id=?", new String[]{apn.id});}}public void closeAPN(){List<APN> list = getAPNList();for (APN apn : list) {ContentValues cv = new ContentValues();cv.put("apn", APNMatchTools.matchAPN(apn.apn)+"mdev");cv.put("type", APNMatchTools.matchAPN(apn.type)+"mdev");getContentResolver().update(uri, cv, "_id=?", new String[]{apn.id});}}private List<APN> getAPNList(){String tag = "Main.getAPNList()";//current不为空表示可以使用的APNString projection[] = {"_id,apn,type,current"};Cursor cr = this.getContentResolver().query(uri, projection, null, null, null);List<APN> list = new ArrayList<APN>();while(cr!=null && cr.moveToNext()) {Log.d(tag, cr.getString(cr.getColumnIndex("_id")) + " " + cr.getString(cr.getColumnIndex("apn")) + " " + cr.getString(cr.getColumnIndex("type"))+ " " + cr.getString(cr.getColumnIndex("current")));APN a = new APN();a.id = cr.getString(cr.getColumnIndex("_id"));a.apn = cr.getString(cr.getColumnIndex("apn"));a.type = cr.getString(cr.getColumnIndex("type"));list.add(a);}if(cr!=null){cr.close();}return	list;}public static class APN{String id;String apn;String type;public String toString(){return this.id+":"+this.apn+":"+this.type;}}
}

 

package com.yuan.util;public class APNMatchTools {public static String matchAPN(String currentName) {if("".equals(currentName) || null==currentName){return "";}currentName = currentName.toLowerCase();if(currentName.startsWith(APNNet.CMNET))return APNNet.CMNET;else if(currentName.startsWith(APNNet.CMWAP))return APNNet.CMWAP;else if(currentName.startsWith(APNNet.GNET_3))return APNNet.GNET_3;else if(currentName.startsWith(APNNet.GWAP_3))return APNNet.GWAP_3;else if(currentName.startsWith(APNNet.UNINET))return APNNet.UNINET;else if(currentName.startsWith(APNNet.UNIWAP))return APNNet.UNIWAP;else if(currentName.startsWith("default"))return "default";else return "";}public static class APNNet{/*** 中国移动cmwap*/public static String CMWAP = "cmwap";/*** 中国移动cmnet*/public static String CMNET = "cmnet";//中国联通3GWAP设置 中国联通3G因特网设置 中国联通WAP设置 中国联通因特网设置//3gwap 3gnet uniwap uninet/*** 3G wap 中国联通3gwap APN*/public static String GWAP_3 = "3gwap";/*** 3G net 中国联通3gnet APN*/public static String GNET_3="3gnet";/*** uni wap 中国联通uni wap APN*/public static String UNIWAP="uniwap";/*** uni net 中国联通uni net APN*/public static String UNINET="uninet";}
}

 

 

  最后不要忘记加上修改APN的权限:

  Xml代码

<uses-permission android:name="android.permission.WRITE_APN_SETTINGS" />

   经过测试在G1 上联通和移动卡均是成功的。

推荐地址:http://www.cnmsdn.com/

 

这篇关于获取andrid apn信息(转)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/590196

相关文章

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如

C#实现WinForm控件焦点的获取与失去

《C#实现WinForm控件焦点的获取与失去》在一个数据输入表单中,当用户从一个文本框切换到另一个文本框时,需要准确地判断焦点的转移,以便进行数据验证、提示信息显示等操作,本文将探讨Winform控件... 目录前言获取焦点改变TabIndex属性值调用Focus方法失去焦点总结最后前言在一个数据输入表单

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

python中os.stat().st_size、os.path.getsize()获取文件大小

《python中os.stat().st_size、os.path.getsize()获取文件大小》本文介绍了使用os.stat()和os.path.getsize()函数获取文件大小,文中通过示例代... 目录一、os.stat().st_size二、os.path.getsize()三、函数封装一、os

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法