android---APN切换

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

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

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

android---APN切换,布布扣,bubuko.com

android---APN切换

上一篇:iOS:KVO的概述与使用


下一篇:ios - 再细读KVO