- 浏览: 30882 次
- 性别:
- 来自: 北京
最近访客 更多访客>>
最新评论
-
JavaJ2me:
请问还知道别的方法,开启移动网络吗??
Android APN设置 -
Ancool:
pdf没研究,有空我看看,代码肯定是需要自己写的,除非别人已经 ...
Android打开文件 -
Ancool:
littlenewus 写道帅哥 如果打开一个html或者p ...
Android打开文件 -
littlenewus:
帅哥 如果打开一个html或者pdf type应该写什么?
Android打开文件
由于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 cc.mdev.apn; import java.util.ArrayList; import java.util.List; 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; /** * 這裡是Activity * @author SinFrancis wong * @site http://mdev.cc * @wiki http://mdev.cc/wiki * @since 2010-01-08 */ public class Main extends Activity { /** Called when the activity is first created. */ Uri uri = Uri.parse("content://telephony/carriers"); @Override 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() { @Override public void onClick(View v) { openAPN(); } }); close.setOnClickListener(new View.OnClickListener() { @Override 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不为空表示可以使用的APN String 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; } }
APNMatchTools.java
package cc.mdev.apn; /** * 這裡是APN匹配,用於匹配移動或者聯通的APN * @author SinFrancis wong * @site http://mdev.cc * @wiki http://mdev.cc/wiki * @since 2010-01-08 * */ public final class APNMatchTools { 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"; } 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 ""; // return currentName.substring(0, currentName.length() - SUFFIX.length()); } }
APN权限
<uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission>
发表评论
-
Android 中 Proguard 和 JNI 的相关问题
2012-03-27 12:26 915在Android项目中用到JNI,当用了proguard后,发 ... -
Android中隐藏标题栏和状态栏
2011-03-21 14:57 1417一、隐藏标题栏 //隐藏标题栏 this.re ... -
Android原生(Native)C开发之五:zlib移植笔记
2011-01-23 20:53 1048zlib(http://www.zlib.net/)是一 ... -
Android原生(Native)C开发之四:SDL移植笔记
2011-01-23 20:48 1694SDL(Simple DirectMedia Layer ... -
Android原生(Native)C开发之三:鼠标事件篇(捕鼠记)
2011-01-23 20:41 954在做SDL至Android的移植时,键盘事件是能正常捕获到,看 ... -
Android原生(Native)C开发之二:framebuffer篇
2011-01-23 20:16 990虽然现在能通过交叉环境编译程序,并push到Android ... -
Android原生(Native)C开发之一:环境搭建篇
2011-01-23 20:12 1073Android是基于Linux的操作系统,处理器是ARM的,所 ... -
Android隐藏程序及调用
2011-01-23 14:52 1402新建一个activity,编辑AndroidMani ... -
Ubuntu下使用Android ADB
2011-01-23 14:37 1589android本身就有linux下的SDK包。 所以就方 ... -
Android各种调用
2011-01-23 13:33 8931,web 浏览器 Jav ... -
Android Intent and Intent-filter SDK file
2011-01-23 13:03 1270Android Intent and Intent-filte ... -
使用Android系统隐藏api读取*.apk程序安装包信息
2011-01-23 11:42 1139前提:我们需要得到 Android 系统源码编 ... -
Android获取手机型号和系统版本号
2011-01-18 17:19 1244手机型号和版本号获取方法: public void onC ... -
Android打开文件
2011-01-14 13:26 2688/* 在手机上打开文件的method */ p ... -
Android数据存储之二SharedPreferences
2011-01-14 11:19 915在此之前的学习内容是数据存储之一文件存储 ... -
Android数据存储之三SQLite嵌入式数据库(2)
2011-01-14 10:53 11445. 编写测试类 ... -
Android数据存储之三SQLite嵌入式数据库(1)
2011-01-14 10:51 905一、 SQLite 简介 ... -
Android小东东收集
2011-01-14 10:06 957//设置ListView中item第一个的上面和下面两条分隔线 ...
相关推荐
在android代码中切换网络,如cmnet,cmwap
附件为apndemo,apn.xml需放到U盘或者sd卡根目录,在有信号的时候插卡或U盘3秒后配置成功
设置android的APN配置,移动2G和联通的2G和3G网络配置,以及MMS的APN配置
android APN开发流程
android 全面解析apn
Android APN开发流程分析
android 设置apn,包括自动和手动,成熟代码
基于android2.2的apn开发,可以自己改写并通过第三方软件在来设置apn从而达到自己想要的结果。
底层源码分析,能够让你豁然开朗。...数据连接的核心控制类是DataConnectionTracker,存在于GSMPhone里,数据连接不需要用户的干预,在APN设置好之后,在适当的情况下就会自动激活,激活的入口点是:
android apn切换程序,支持最新版的安卓系统,绝对好用,下载下来收藏吧
android端通过代码实现apn配置,这里做一下记录,方便以后查看这部分实现内容
Android开发之系统信息【5】——获取APN列表Android开发之系统信息【5】——获取APN列表
Android AT命令与APN开发流程分析
可以将Android中APN文件转化为windowphones8中的APN文件,因为APN数量过多,所以不用手动转化,方便极了。
APN的英文全称是Access Point Name,中文全称叫接入点,是您在通过手机上网时必须配置的一个参数,它决定了您的手机通过哪种接入方式来访问网络。 有时候需要修改APN的时候会发现无法更改,连常用的海卓HIAPN都无法...
在HTC三星摩托手机均试验过,网上关于GPRS/3G开关的资源非常少,贴出来与到家一起学习,不好的地方请指正!
这个是我在最近研究的android平台上消息推送的源码
国内运营商,中国移动,联通,电信,android上网APN
接入点设置 APN 设置是一个 Android 应用程序,它充当 Android 设置的 APN 设置部分的快捷方式。 通过可用的构建。