android手机客户端在上传文件时,有时候会一直失败,其可能的原因是APN的设置。wap下的成功率极低,所以在进行文件上传时最好设置下 apn为net形式。下面是我在网上找的一些代码,是由wap转net的,当然net转wap稍微修改下就可以。经测试是可用的,分享一下:

PS:apn的切换过程需要时间,不是立即生效。

  1. package com.android.couples;
  2. import java.util.ArrayList;
  3. import android.content.ContentResolver;
  4. import android.content.ContentValues;
  5. import android.content.Context;
  6. import android.database.Cursor;
  7. import android.net.Uri;
  8. import android.text.TextUtils;
  9. import android.util.Log;
  10. public class APNManager {
  11. private static String TAG = "APNManager";
  12. private static final Uri APN_TABLE_URI = Uri
  13. .parse("content://telephony/carriers");// 所有的APN配配置信息位置
  14. private static final Uri PREFERRED_APN_URI = Uri
  15. .parse("content://telephony/carriers/preferapn");// 当前的APN
  16. private static String[] projection = { "_id", "apn", "type", "current",
  17. "proxy", "port" };
  18. private static String APN_NET_ID = null;
  19. //切换成NETAPN
  20. public static boolean ChangeNetApn(final Context context) {
  21. final String wapId = getWapApnId(context);
  22. String apnId = getCurApnId(context);
  23. // 若当前apn是wap,则切换至net
  24. if (wapId.equals(apnId)) {
  25. APN_NET_ID = getNetApnId(context);
  26. setApn(context, APN_NET_ID);
  27. // 切换apn需要一定时间,先让等待几秒,与机子性能有关
  28. try {
  29. Thread.sleep(3000);
  30. } catch (InterruptedException e) {
  31. e.printStackTrace();
  32. }
  33. Log.d("xml", "setApn");
  34. return true;
  35. }
  36. return true;
  37. }
  38. //获取当前APN
  39. public static String getCurApnId(Context context) {
  40. ContentResolver resoler = context.getContentResolver();
  41. // String[] projection = new String[] { "_id" };
  42. Cursor cur = resoler.query(PREFERRED_APN_URI, projection, null, null,
  43. null);
  44. String apnId = null;
  45. if (cur != null && cur.moveToFirst()) {
  46. apnId = cur.getString(cur.getColumnIndex("_id"));
  47. }
  48. Log.i("xml","getCurApnId:"+apnId);
  49. return apnId;
  50. }
  51. public static APN getCurApnInfo(final Context context) {
  52. ContentResolver resoler = context.getContentResolver();
  53. // String[] projection = new String[] { "_id" };
  54. Cursor cur = resoler.query(PREFERRED_APN_URI, projection, null, null,
  55. null);
  56. APN apn = new APN();
  57. if (cur != null && cur.moveToFirst()) {
  58. apn.id = cur.getString(cur.getColumnIndex("_id"));
  59. apn.apn = cur.getString(cur.getColumnIndex("apn"));
  60. apn.type = cur.getString(cur.getColumnIndex("type"));
  61. }
  62. return apn;
  63. }
  64. public static void setApn(Context context, String id) {
  65. ContentResolver resolver = context.getContentResolver();
  66. ContentValues values = new ContentValues();
  67. values.put("apn_id", id);
  68. resolver.update(PREFERRED_APN_URI, values, null, null);
  69. Log.d("xml", "setApn");
  70. }
  71. //获取WAP APN
  72. public static String getWapApnId(Context context) {
  73. ContentResolver contentResolver = context.getContentResolver();
  74. // 查询cmwapAPN
  75. Cursor cur = contentResolver.query(APN_TABLE_URI, projection,
  76. "apn = \'cmwap\' and current = 1", null, null);
  77. // wap APN 端口不为空
  78. if (cur != null && cur.moveToFirst()) {
  79. do {
  80. String id = cur.getString(cur.getColumnIndex("_id"));
  81. String proxy = cur.getString(cur.getColumnIndex("proxy"));
  82. if (!TextUtils.isEmpty(proxy)) {
  83. Log.i("xml","getWapApnId"+id);
  84. return id;
  85. }
  86. } while (cur.moveToNext());
  87. }
  88. return null;
  89. }
  90. public static String getNetApnId(Context context) {
  91. ContentResolver contentResolver = context.getContentResolver();
  92. Cursor cur = contentResolver.query(APN_TABLE_URI, projection,
  93. "apn = \'cmnet\' and current = 1", null, null);
  94. if (cur != null && cur.moveToFirst()) {
  95. return cur.getString(cur.getColumnIndex("_id"));
  96. }
  97. return null;
  98. }
  99. //获取所有APN
  100. public static ArrayList<APN> getAPNList(final Context context) {
  101. ContentResolver contentResolver = context.getContentResolver();
  102. Cursor cr = contentResolver.query(APN_TABLE_URI, projection, null,
  103. null, null);
  104. ArrayList<APN> apnList = new ArrayList<APN>();
  105. if (cr != null && cr.moveToFirst()) {
  106. do{
  107. Log.d(TAG,
  108. cr.getString(cr.getColumnIndex("_id")) + ";"
  109. + cr.getString(cr.getColumnIndex("apn")) + ";"
  110. + cr.getString(cr.getColumnIndex("type")) + ";"
  111. + cr.getString(cr.getColumnIndex("current"))+ ";"
  112. + cr.getString(cr.getColumnIndex("proxy")));
  113. APN apn = new APN();
  114. apn.id = cr.getString(cr.getColumnIndex("_id"));
  115. apn.apn = cr.getString(cr.getColumnIndex("apn"));
  116. apn.type = cr.getString(cr.getColumnIndex("type"));
  117. apnList.add(apn);
  118. }while(cr.moveToNext());
  119. cr.close();
  120. }
  121. return apnList;
  122. }
  123. //获取可用的APN
  124. public static ArrayList<APN> getAvailableAPNList(final Context context) {
  125. // current不为空表示可以使用的APN
  126. ContentResolver contentResolver = context.getContentResolver();
  127. Cursor cr = contentResolver.query(APN_TABLE_URI, projection,
  128. "current is not null" , null, null);
  129. ArrayList<APN> apnList = new ArrayList<APN>();
  130. if (cr != null && cr.moveToFirst()) {
  131. do{
  132. Log.d(TAG,
  133. cr.getString(cr.getColumnIndex("_id")) + ";"
  134. + cr.getString(cr.getColumnIndex("apn")) + ";"
  135. + cr.getString(cr.getColumnIndex("type")) + ";"
  136. + cr.getString(cr.getColumnIndex("current"))+ ";"
  137. + cr.getString(cr.getColumnIndex("proxy")));
  138. APN apn = new APN();
  139. apn.id = cr.getString(cr.getColumnIndex("_id"));
  140. apn.apn = cr.getString(cr.getColumnIndex("apn"));
  141. apn.type = cr.getString(cr.getColumnIndex("type"));
  142. apnList.add(apn);
  143. }while (cr.moveToNext());
  144. cr.close();
  145. }
  146. return apnList;
  147. }
  148. //自定义APN包装类
  149. static class APN {
  150. String id;
  151. String apn;
  152. String type;
  153. public String toString() {
  154. return "id=" + id + ",apn=" + apn + ";type=" + type;
  155. }
  156. }
  157. }

android---APN切换的更多相关文章

  1. android 语言切换过程分析

    android 语言切换过程分析 2014-02-27 18:13 1207人阅读 评论(0) 收藏 举报 语言切换android语言切换android改变语言 最近在看一个bug,系统切换语言后,本 ...

  2. cocos2dx shader实现灰度图android后台切换回来导致图像偏移的问题

    转自:http://www.tuicool.com/articles/U3URRrI 项目中经常会遇到将一张图像处理成灰色的需求,为了节省资源,一般不会让美术再做一套同样的灰度图,通常会通过代码处理让 ...

  3. android Button 切换背景,实现动态按钮和按钮颜色渐变

        android Button 切换背景,实现动态按钮和按钮颜色渐变 一.添加android 背景筛选器selector实现按钮背景改变     1.右键单击项目->new->Oth ...

  4. Android Listview切换动画,扩展到任意view切换之间动画实现

    添加布局如下: <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2010 ...

  5. Android技术——切换视图(两)随着ViewPage达到Tab幻灯片浏览

    Android技术--切换视图(一)~(四)在资源项目:https://github.com/YongYuIT/MeiNv_Liulanqi 一.早期android(android.support.v ...

  6. [FMX]将 Android 程序切换到后台及从后台切换到前台实现

    有时候,我们需要将自己的Android程序切换到后台运行,在必要时,将其切换到前台运行.下面提供了一种实现方式,首先需要引用三个单元:   1 uses Androidapi.JNI.App,Andr ...

  7. Android Activity 切换动画(非原创)

    在Android开发过程中,经常会碰到Activity之间的切换效果的问题,下面介绍一下如何实现左右滑动的切换效果,首先了解一下Activity切换的实现,从Android2.0开始在Activity ...

  8. Android 横屏切换竖屏Activity的生命周期(转)

    曾经遇到过一个面试题,让你写出横屏切换竖屏Activity的生命周期.现在给大家分析一下他切换时具体的生命周期是怎么样的:  1.新建一个Activity,并把各个生命周期打印出来  2.运行Acti ...

  9. Android开发切换host应用

    由于在工作过程中常需要切换手机的host来测试不同服务器上的接口,所以想到需要这么个软件. SwitchHost在PC上是一款很好用的修改Host的软件,手机上也需要这么一款App(当然手机需要已经R ...

  10. 【转】Android 语言切换过程分析

    最近在看一个bug,系统切换语言后,本来退到后台的音乐,会在通知栏上显示通知.为了解决这个bug,我学习了下android的语言切换流程,也参考了大量其他人的资料.(主要参考了http://blog. ...

随机推荐

  1. php 生成类的对象 $a=new test();

    程序 <?php class test { ... } $a=new test(); 1.BNF 范式 start: variable '=' expr ';' expr: new_expr ; ...

  2. ExecuteStoreQuery

    using (var webdb = new kyj_NewHouseDBEntities()) { string sql = "select * from developer where ...

  3. 17、手势(Gesture)

    课程目标: 学习Android必不可少的手势的功能 了解手势识别原理 , 掌握制作,加载以及识别手势 写出自己的手势Demo 重点难点:手势机制的了解     手势库的制作 考核目标:请说一下手势库的 ...

  4. Python脚本控制的WebDriver 常用操作 <二十一> 执行JS

    测试用例场景 如果你熟悉js的话,那么使用webdriver执行js就是一件很高效的事情了.在webdriver脚本中直接执行js的好处很多,这里就不一一枚举了. webdriver提供了execut ...

  5. selenium 调用JS操作滚动条(java)来解决element not clickable的问题

    今天在运行自动化用例的时候,发现总是某个元素提示not  clickable.分析原因有可能是页面右下角那个大大的top图标,刚好挡住了我要点击的元素.要解决就得拉动页面,就需要操作页面上的滚动条. ...

  6. ImagePacker

    [下载]:ImagePacker 0.0.2 [作用]:将多个图片打包到指定大小的图片中,并输出配置文件.类似于 TexturePacker,不过当前只支持 Starling 格式输出(因为我现在使用 ...

  7. 解决JSP页面无法使用EasyUI里面class="easyui-dialog"的问题

    当使用MyEclipse新建一个JSP页面的时候,MyEclipse会自动添加一些标记,这些标记也许不一定会在工程中使用到.比如<base href="<%=basePath%& ...

  8. linux set

    linux  set 命令 功能说明:设置shell. 语 法:set [+-abCdefhHklmnpPtuvx] 补充说明:用set 命令可以设置各种shell选项或者列 出shell变量.单个选 ...

  9. 编译并使用Lua语言

    Lua是一个小巧的脚本语言,该语言设计的目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能. 可扩展性.Lua的扩展性非常卓越,可以通过Lua代码或C代码扩展,很多功能可以通过外部库来扩 ...

  10. 关于七牛云存储,HTTPS资源上传不成功问题

    关于七牛云存储,HTTPS资源上传不成功问题 官方给出了一个解决方案,亲测可用.特此记录一下. 找到QNConfiguration.m文件.然后重写两个方法,直接上代码. + (instancetyp ...