android 打开APN

 版权所有,转载请注明来自Mobile Developer (http://mdev.cc )  作者  : SinFrancis

 

由于Android对于APN的网络API没有公开,不过我们可以阅读源代码,然后进行数据库操作,系统会自动监听数据库的变化,从而实现开启或者关闭APN。

 

大家可以研究一下frameworks/base/core/java/android/provider/Telephony.java这个类,

比较重要的就是 URI 和数据库字段: content://telephony/carriers

字段可以在Telephony.java中找到。

 

 

其实原理很简单 : 

1 、 当开启APN的时候,设置一个正确的移动或者联通的APN

2、 关闭的时候设置一个错误APN就会自动关闭网络

 

请看代码:Activity:

 

  1 package cc.mdev.apn;  2   3 import java.util.ArrayList;  4 import java.util.List;  5   6 import android.app.Activity;  7 import android.content.ContentValues;  8 import android.database.Cursor;  9 import android.net.Uri; 10 import android.os.Bundle; 11 import android.util.Log; 12 import android.view.View; 13 import android.widget.Button; 14  15  16 /** 17  * �@�e是Activity 18  * @author SinFrancis wong 19  * @site http://mdev.cc 20  * @wiki http://mdev.cc/wiki 21  * @since 2010-01-08 22  */ 23 public class Main extends Activity { 24     /** Called when the activity is first created. */ 25     Uri uri = Uri.parse("content://telephony/carriers"); 26     @Override 27     public void onCreate(Bundle savedInstanceState) { 28         super.onCreate(savedInstanceState); 29         setContentView(R.layout.main); 30          31         Button pen= (Button) findViewById(R.id.open); 32         Button close= (Button) findViewById(R.id.close); 33          34         open.setOnClickListener(new View.OnClickListener() { 35              36             @Override 37             public void onClick(View v) { 38                 openAPN(); 39             } 40         }); 41          42          43         close.setOnClickListener(new View.OnClickListener() { 44              45             @Override 46             public void onClick(View v) { 47                 closeAPN(); 48             } 49         }); 50          51     } 52      53     public  void openAPN(){ 54          55         List<APN> list = getAPNList(); 56         for (APN apn : list) { 57             ContentValues cv = new ContentValues(); 58             cv.put("apn", APNMatchTools.matchAPN(apn.apn)); 59             cv.put("type", APNMatchTools.matchAPN(apn.type)); 60             getContentResolver().update(uri, cv, "_id=?", new String[]{apn.id}); 61              62         } 63     } 64      65     public void closeAPN(){ 66         List<APN> list = getAPNList(); 67         for (APN apn : list) { 68             ContentValues cv = new ContentValues(); 69             cv.put("apn", APNMatchTools.matchAPN(apn.apn)+"mdev"); 70             cv.put("type", APNMatchTools.matchAPN(apn.type)+"mdev"); 71             getContentResolver().update(uri, cv, "_id=?", new String[]{apn.id}); 72              73         } 74     } 75      76     private List<APN> getAPNList(){ 77         String tag = "Main.getAPNList()"; 78          79         //current不为空表示可以使用的APN 80         String  projection[] = {"_id,apn,type,current"}; 81         Cursor cr = this.getContentResolver().query(uri, projection, null, null, null); 82          83         List<APN> list = new ArrayList<APN>(); 84          85         while(cr!=null && cr.moveToNext()){ 86             Log.d(tag, cr.getString(cr.getColumnIndex("_id")) + "  " + cr.getString(cr.getColumnIndex("apn")) + "  " + cr.getString(cr.getColumnIndex("type"))+ "  " + cr.getString(cr.getColumnIndex("current"))); 87             APN a = new APN(); 88             a.id = cr.getString(cr.getColumnIndex("_id")); 89             a.apn = cr.getString(cr.getColumnIndex("apn")); 90             a.type = cr.getString(cr.getColumnIndex("type")); 91             list.add(a); 92         } 93         if(cr!=null) 94         cr.close(); 95         return list; 96     } 97      98      99     public static class APN{100         String id;101         String apn;102         String type;103     } 

你可能感兴趣的:(android,mobile,版权)