android APN相关

来源:互联网 发布:淘宝网秋冬打底衫 编辑:程序博客网 时间:2024/05/29 07:23

APN(Access Point Name),即“接入点名称”,用来标识GPRS的业务种类,目前分为两大类:CMWAP(通过GPRS访问WAP业务)、CMNET(除了WAP以外的服务目前都用CMNET,比如连接因特网等)。是您在通过手机上网时必须配置的一个参数,它决定了您的手机通过哪种接入方式来访问网络。


  移动手机的默认上网配置有两种:CMWAP和CMNET。一些使用移动办公的大客户,通常会使用专用APN,其接入点随意定义,只要和该省运营商其他APN不冲突即可。

  CMWAP也叫移动梦网,通过该接入点可接入一个比较大的移动私网,网内有大量的手机应用下载及资源访问。因为CMWAP不接入互联网,只接入移动运营商的私网,所以流量费用比较低廉。

  CMNET也叫GPRS连接互联网,通常每个省的运营商会提供若干个Internet出口以供CMNET拨号用户使用。其流量费用较CMWAP要高一些。

  目前国内销售的手机,如果是非智能机,通常已配置好CMWAP连接,智能机通常会配置CMWAP和CMNET连接。如需手动添加这些配置,请参考手机说明书。

  专有APN在功能上可以和Internet的VPN做类比,实际上他就是基于GPRS的VPN网络。

  专有APN常见组网方式

  1,运营商部署一条专线接入到企业的网络中,局端和企业端路由器之间采用私有IP进行连接。

  2,局端互连路由器与GGSN采用GRE隧道连接。

  专有APN的几个重要特点:

  1,除非运营商分配一个Internet IP地址,否则计算机没有任何办法通过Internet访问该APN中的主机。

  2,只有手机卡号在APN中的白名单之列,该手机才可以接入该APN。

  3,企业客户可以建立一套RADIUS和DHCP服务器,GGSN向RADIUS服务器提供用户主叫号码,采用主叫号码和用户账号相结合的认证方式;用户通过认证后由DHCP服务器分配企业内部的静态IP地址。补充:该认证方式不一定适合于每个省的运营商,这取决于该省运营商的APN管理平台。

  GPRS专网系统终端上网登录服务器平台的流程为:

  1)用户发出GPRS登录请求,请求中包括由运营商为GPRS专网系统专门分配的专网APN;

  2)根据请求中的APN,SGSN向DNS服务器发出查询请求,找到与企业服务器平台连接的GGSN,并将用户请求通过GTP隧道 装送给GGSN;

  3)GGSN将用户认证信息(包括手机号码、用户账号、密码等)通过专线送至Radius进行认证;

  4)Radius认证服务器看到手机号等认证信息,确认是合法用户发来的请求,向DHCP服务器请求分配用户地址;

  5)Radius认证通过后,由Radius向GGSN发送携带用户地址的确认信息;

  6)用户得到了IP地址,就可以携带数据包,对GPRS专网系统信息查询和业务处理平台进行访问。

介绍引用http://roll.sohu.com/20120331/n339541056.shtml

例子引用http://blog.csdn.net/leilu2008/article/details/8900584

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >    </uses-permission>    <uses-permission android:name="android.permission.WRITE_APN_SETTINGS" >    </uses-permission>    <uses-permission android:name="android.permission.READ_PHONE_STATE" />    <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
package com.lenovo.testapn;import android.app.Activity;import android.content.ContentResolver;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.telephony.TelephonyManager;import android.util.Log;import android.view.Menu;public class MainActivity extends Activity {private static final String TAG = "MainActivity";public static final Uri APN_URI = Uri.parse("content://telephony/carriers");// public static final Uri PREFERRED_APN_URI// =Uri.parse("PREFERRED_APN_URI  PREFERRED_APN_URI ");public static final Uri CURRENT_APN_URI = Uri.parse("content://telephony/carriers/preferapn");@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.d(TAG, "onCreate");checkAPN();// SetAPN(addAPN());}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.activity_main, menu);return true;}public void checkAPN() {// 检查当前连接的APNCursor cr = getContentResolver().query(APN_URI, null, null, null, null);Log.d(TAG, "cr" + cr);while (cr != null && cr.moveToNext()) {// if(cr.getString(cr.getColumnIndex("_id")))// APN idString id = cr.getString(cr.getColumnIndex("_id"));Log.d(TAG, "id" + id);//String apn_id= cr.getString(cr.getColumnIndex("apn_id"));////Log.d(TAG, "apn_id" + apn_id);// APN nameString apn = cr.getString(cr.getColumnIndex("apn"));Log.d(TAG, apn);// Toast.makeText(getApplicationContext(),// "当前 id:" + id + " apn:" + apn, Toast.LENGTH_LONG).show();}}// 新增一个cmnet接入点public int addAPN() {int id = -1;Log.d(TAG, "添加一个新的apn");String NUMERIC = getSIMInfo();Log.d(TAG, "NUMERIC" + NUMERIC);if (NUMERIC == null) {return -1;}ContentResolver resolver = this.getContentResolver();ContentValues values = new ContentValues();SIMCardInfo siminfo = new SIMCardInfo(MainActivity.this);// String user = siminfo.getNativePhoneNumber().substring(start);values.put("name", "专用APN"); // apn中文描述values.put("apn", "myapn"); // apn名称values.put("type", "default,supl");values.put("numeric", NUMERIC);values.put("mcc", NUMERIC.substring(0, 3));values.put("mnc", NUMERIC.substring(3, NUMERIC.length()));values.put("proxy", "");values.put("port", "");values.put("mmsproxy", "");values.put("mmsport", "");values.put("user", "");values.put("server", "");values.put("password", "");values.put("mmsc", "");Cursor c = null;Uri newRow = resolver.insert(APN_URI, values);if (newRow != null) {c = resolver.query(newRow, null, null, null, null);int idIndex = c.getColumnIndex("_id");c.moveToFirst();id = c.getShort(idIndex);}if (c != null)c.close();return id;}protected String getSIMInfo() {TelephonyManager iPhoneManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);return iPhoneManager.getSimOperator();}// 设置接入点public void SetAPN(int id) {ContentResolver resolver = this.getContentResolver();ContentValues values = new ContentValues();values.put("apn_id", id);resolver.update(CURRENT_APN_URI, values, null, null);// resolver.delete(url, where, selectionArgs)}}
更详细内容可以学习APNDroid开源项目,或者在eoe客户端源码中也有相关部分内容。

0 0
原创粉丝点击