获取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

相关文章

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新