android---APN切换
android手机客户端在上传文件时,有时候会一直失败,其可能的原因是APN的设置。wap下的成功率极低,所以在进行文件上传时最好设置下 apn为net形式。下面是我在网上找的一些代码,是由wap转net的,当然net转wap稍微修改下就可以。经测试是可用的,分享一下:
PS:apn的切换过程需要时间,不是立即生效。
- package com.android.couples;
- import java.util.ArrayList;
- import android.content.ContentResolver;
- import android.content.ContentValues;
- import android.content.Context;
- import android.database.Cursor;
- import android.net.Uri;
- import android.text.TextUtils;
- import android.util.Log;
- public class APNManager {
- private static String TAG = "APNManager";
- private static final Uri APN_TABLE_URI = Uri
- .parse("content://telephony/carriers");// 所有的APN配配置信息位置
- private static final Uri PREFERRED_APN_URI = Uri
- .parse("content://telephony/carriers/preferapn");// 当前的APN
- private static String[] projection = { "_id", "apn", "type", "current",
- "proxy", "port" };
- private static String APN_NET_ID = null;
- //切换成NETAPN
- public static boolean ChangeNetApn(final Context context) {
- final String wapId = getWapApnId(context);
- String apnId = getCurApnId(context);
- // 若当前apn是wap,则切换至net
- if (wapId.equals(apnId)) {
- APN_NET_ID = getNetApnId(context);
- setApn(context, APN_NET_ID);
- // 切换apn需要一定时间,先让等待几秒,与机子性能有关
- try {
- Thread.sleep(3000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- Log.d("xml", "setApn");
- return true;
- }
- return true;
- }
- //获取当前APN
- public static String getCurApnId(Context context) {
- ContentResolver resoler = context.getContentResolver();
- // String[] projection = new String[] { "_id" };
- Cursor cur = resoler.query(PREFERRED_APN_URI, projection, null, null,
- null);
- String apnId = null;
- if (cur != null && cur.moveToFirst()) {
- apnId = cur.getString(cur.getColumnIndex("_id"));
- }
- Log.i("xml","getCurApnId:"+apnId);
- return apnId;
- }
- public static APN getCurApnInfo(final Context context) {
- ContentResolver resoler = context.getContentResolver();
- // String[] projection = new String[] { "_id" };
- Cursor cur = resoler.query(PREFERRED_APN_URI, projection, null, null,
- null);
- APN apn = new APN();
- if (cur != null && cur.moveToFirst()) {
- apn.id = cur.getString(cur.getColumnIndex("_id"));
- apn.apn = cur.getString(cur.getColumnIndex("apn"));
- apn.type = cur.getString(cur.getColumnIndex("type"));
- }
- return apn;
- }
- public static void setApn(Context context, String id) {
- ContentResolver resolver = context.getContentResolver();
- ContentValues values = new ContentValues();
- values.put("apn_id", id);
- resolver.update(PREFERRED_APN_URI, values, null, null);
- Log.d("xml", "setApn");
- }
- //获取WAP APN
- public static String getWapApnId(Context context) {
- ContentResolver contentResolver = context.getContentResolver();
- // 查询cmwapAPN
- Cursor cur = contentResolver.query(APN_TABLE_URI, projection,
- "apn = \'cmwap\' and current = 1", null, null);
- // wap APN 端口不为空
- if (cur != null && cur.moveToFirst()) {
- do {
- String id = cur.getString(cur.getColumnIndex("_id"));
- String proxy = cur.getString(cur.getColumnIndex("proxy"));
- if (!TextUtils.isEmpty(proxy)) {
- Log.i("xml","getWapApnId"+id);
- return id;
- }
- } while (cur.moveToNext());
- }
- return null;
- }
- public static String getNetApnId(Context context) {
- ContentResolver contentResolver = context.getContentResolver();
- Cursor cur = contentResolver.query(APN_TABLE_URI, projection,
- "apn = \'cmnet\' and current = 1", null, null);
- if (cur != null && cur.moveToFirst()) {
- return cur.getString(cur.getColumnIndex("_id"));
- }
- return null;
- }
- //获取所有APN
- public static ArrayList<APN> getAPNList(final Context context) {
- ContentResolver contentResolver = context.getContentResolver();
- Cursor cr = contentResolver.query(APN_TABLE_URI, projection, null,
- null, null);
- ArrayList<APN> apnList = new ArrayList<APN>();
- if (cr != null && cr.moveToFirst()) {
- do{
- Log.d(TAG,
- cr.getString(cr.getColumnIndex("_id")) + ";"
- + cr.getString(cr.getColumnIndex("apn")) + ";"
- + cr.getString(cr.getColumnIndex("type")) + ";"
- + cr.getString(cr.getColumnIndex("current"))+ ";"
- + cr.getString(cr.getColumnIndex("proxy")));
- APN apn = new APN();
- apn.id = cr.getString(cr.getColumnIndex("_id"));
- apn.apn = cr.getString(cr.getColumnIndex("apn"));
- apn.type = cr.getString(cr.getColumnIndex("type"));
- apnList.add(apn);
- }while(cr.moveToNext());
- cr.close();
- }
- return apnList;
- }
- //获取可用的APN
- public static ArrayList<APN> getAvailableAPNList(final Context context) {
- // current不为空表示可以使用的APN
- ContentResolver contentResolver = context.getContentResolver();
- Cursor cr = contentResolver.query(APN_TABLE_URI, projection,
- "current is not null" , null, null);
- ArrayList<APN> apnList = new ArrayList<APN>();
- if (cr != null && cr.moveToFirst()) {
- do{
- Log.d(TAG,
- cr.getString(cr.getColumnIndex("_id")) + ";"
- + cr.getString(cr.getColumnIndex("apn")) + ";"
- + cr.getString(cr.getColumnIndex("type")) + ";"
- + cr.getString(cr.getColumnIndex("current"))+ ";"
- + cr.getString(cr.getColumnIndex("proxy")));
- APN apn = new APN();
- apn.id = cr.getString(cr.getColumnIndex("_id"));
- apn.apn = cr.getString(cr.getColumnIndex("apn"));
- apn.type = cr.getString(cr.getColumnIndex("type"));
- apnList.add(apn);
- }while (cr.moveToNext());
- cr.close();
- }
- return apnList;
- }
- //自定义APN包装类
- static class APN {
- String id;
- String apn;
- String type;
- public String toString() {
- return "id=" + id + ",apn=" + apn + ";type=" + type;
- }
- }
- }
android---APN切换的更多相关文章
- android 语言切换过程分析
android 语言切换过程分析 2014-02-27 18:13 1207人阅读 评论(0) 收藏 举报 语言切换android语言切换android改变语言 最近在看一个bug,系统切换语言后,本 ...
- cocos2dx shader实现灰度图android后台切换回来导致图像偏移的问题
转自:http://www.tuicool.com/articles/U3URRrI 项目中经常会遇到将一张图像处理成灰色的需求,为了节省资源,一般不会让美术再做一套同样的灰度图,通常会通过代码处理让 ...
- android Button 切换背景,实现动态按钮和按钮颜色渐变
android Button 切换背景,实现动态按钮和按钮颜色渐变 一.添加android 背景筛选器selector实现按钮背景改变 1.右键单击项目->new->Oth ...
- Android Listview切换动画,扩展到任意view切换之间动画实现
添加布局如下: <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2010 ...
- Android技术——切换视图(两)随着ViewPage达到Tab幻灯片浏览
Android技术--切换视图(一)~(四)在资源项目:https://github.com/YongYuIT/MeiNv_Liulanqi 一.早期android(android.support.v ...
- [FMX]将 Android 程序切换到后台及从后台切换到前台实现
有时候,我们需要将自己的Android程序切换到后台运行,在必要时,将其切换到前台运行.下面提供了一种实现方式,首先需要引用三个单元: 1 uses Androidapi.JNI.App,Andr ...
- Android Activity 切换动画(非原创)
在Android开发过程中,经常会碰到Activity之间的切换效果的问题,下面介绍一下如何实现左右滑动的切换效果,首先了解一下Activity切换的实现,从Android2.0开始在Activity ...
- Android 横屏切换竖屏Activity的生命周期(转)
曾经遇到过一个面试题,让你写出横屏切换竖屏Activity的生命周期.现在给大家分析一下他切换时具体的生命周期是怎么样的: 1.新建一个Activity,并把各个生命周期打印出来 2.运行Acti ...
- Android开发切换host应用
由于在工作过程中常需要切换手机的host来测试不同服务器上的接口,所以想到需要这么个软件. SwitchHost在PC上是一款很好用的修改Host的软件,手机上也需要这么一款App(当然手机需要已经R ...
- 【转】Android 语言切换过程分析
最近在看一个bug,系统切换语言后,本来退到后台的音乐,会在通知栏上显示通知.为了解决这个bug,我学习了下android的语言切换流程,也参考了大量其他人的资料.(主要参考了http://blog. ...
随机推荐
- Access增删改查 (持续更新中)
关于Access数据库(2003)的增删改查,其实和Sql大体差不多,但是还有很多不一样的地方.下面列几个容易犯的错误: 1.Access数据库的位置: conn = new OleDbConnec ...
- [swustoj 183] 种树
种树(0183) 问题描述 Aconly有一块矩形的地,因为这块地里有很多石头,耕作很不方便,所以他打算在这块地上种一些果树.这块地用一个只含‘#’和‘*’的N*M的矩阵来表示,‘#’表示泥土,‘*’ ...
- Ruby基础类型,动态特性,代码块
#Ruby内置基础数据类型 NilClass,TureClass,FalseClass,Time,Date,String,Range,Struct,Array,Hash #Numerice 1.分为I ...
- 【转】AngularJS路由和模板
1. AngularJS路由介绍 AngularJS路由功能是一个纯前端的解决方案,与我们熟悉的后台路由不太一样.后台路由,通过不同的URL会路由到不同的控制器上(controller),再渲染(re ...
- [转] ArcEngine中打开各种数据源(WorkSpace)的连接
原文 ArcEngine中打开各种数据源(WorkSpace)的连接(SDE.personal/File.ShapeFile.CAD数据.影像图.影像数据集) ArcEngine 可以接受多种数据源. ...
- 黑盒测试用例设计方法&理论结合实际 -> 等价类划分
一. 概念 等价类划分法是把程序的输入域划分成若干部分(子集),然后从每个部分中选取少数代表性数据作为测试用例.每一类的代表性数据在测试中的作用等价于这一类中的其他值. 二. 等价类划分的应用 等价类 ...
- ASP.NET Web API 如何通过程序控制返回xml还是json
雖然 ASP.NET Web API 內建支援 JSON 與 XML 兩種輸出格式,並依據瀏覽器端送出的 Accept 標頭自動決定回應的內容格式,不過有時候我們的確也需要讓程式來控制要回應哪種格式, ...
- win7下代替IDM的下载工具
EagleGet 批量下载干刚刚的!!!!! 立马卸载IDM,哈哈哈 下载地址(免费软件) http://pan.baidu.com/s/1ntupiZJ
- [GRYZ2015]足球联赛
问题描述 巴蜀中学新一季的足球联赛开幕了.足球联赛有n 只球队参赛,每赛季,每只球队要与其他球队各赛两场,主客各一场,赢一场得3 分,输一场不得分,平局两只队伍各得一分.英勇无畏的小鸿是机房的主力前锋 ...
- Python:itertools模块
itertools模块包含创建有效迭代器的函数,可以用各种方式对数据进行循环操作,此模块中的所有函数返回的迭代器都可以与for循环语句以及其他包含迭代器(如生成器和生成器表达式)的函数联合使用. ch ...