网上看了很多资料,再加上自己的理解和探索,终于实现了添加接入点设置和将当前网络设置为自己指定的网络接入点。废话不多说,上源码,大家分享下:(在moto-xt800,CDMA下进行了测试)

1.准备工作:

AndroidManifest。xml文件里添加以下三个权限设置:

<uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission>

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

开始上代码了,很期待吧?

2.新建一个类ApnNode,算是属性设置吧

public class ApnNode {

private   String name ;

private  String apn ;

private String proxy ;

private  String port;
    
     private  String user;
    
     private  String server;
    
     private  String password;
    
     private  String mmsc;

private  String mmsproxy;

private  String mmsport;

private  String mcc;

private  String mnc;

private  String numeric;
    
     private String type;

/**
      * @return the name
      */
     public String getName() {
         return name;
     }

/**
      * @param name the name to set
      */
     public void setName(String name) {
         this.name = name;
     }

/**
      * @return the apn
      */
     public String getApn() {
         return apn;
     }

/**
      * @param apn the apn to set
      */
     public void setApn(String apn) {
         this.apn = apn;
     }

/**
      * @return the proxy
      */
     public String getProxy() {
         return proxy;
     }

/**
      * @param proxy the proxy to set
      */
     public void setProxy(String proxy) {
         this.proxy = proxy;
     }

/**
      * @return the port
      */
     public String getPort() {
         return port;
     }

/**
      * @param port the port to set
      */
     public void setPort(String port) {
         this.port = port;
     }

/**
      * @return the user
      */
     public String getUser() {
         return user;
     }

/**
      * @param user the user to set
      */
     public void setUser(String user) {
         this.user = user;
     }

/**
      * @return the server
      */
     public String getServer() {
         return server;
     }

/**
      * @param server the server to set
      */
     public void setServer(String server) {
         this.server = server;
     }

/**
      * @return the password
      */
     public String getPassword() {
         return password;
     }

/**
      * @param password the password to set
      */
     public void setPassword(String password) {
         this.password = password;
     }

/**
      * @return the mmsc
      */
     public String getMmsc() {
         return mmsc;
     }

/**
      * @param mmsc the mmsc to set
      */
     public void setMmsc(String mmsc) {
         this.mmsc = mmsc;
     }

/**
      * @return the mmsproxy
      */
     public String getMmsproxy() {
         return mmsproxy;
     }

/**
      * @param mmsproxy the mmsproxy to set
      */
     public void setMmsproxy(String mmsproxy) {
         this.mmsproxy = mmsproxy;
     }

/**
      * @return the mmsport
      */
     public String getMmsport() {
         return mmsport;
     }

/**
      * @param mmsport the mmsport to set
      */
     public void setMmsport(String mmsport) {
         this.mmsport = mmsport;
     }

/**
      * @return the mcc
      */
     public String getMcc() {
         return mcc;
     }

/**
      * @param mcc the mcc to set
      */
     public void setMcc(String mcc) {
         this.mcc = mcc;
     }

/**
      * @return the mnc
      */
     public String getMnc() {
         return mnc;
     }

/**
      * @param mnc the mnc to set
      */
     public void setMnc(String mnc) {
         this.mnc = mnc;
     }

/**
      * @return the numeric
      */
     public String getNumeric() {
         return numeric;
     }

/**
      * @param numeric the numeric to set
      */
     public void setNumeric(String numeric) {
         this.numeric = numeric;
     }

/**
      * @return the type
      */
     public String getType() {
         return type;
     }

/**
      * @param type the type to set
      */
     public void setType(String type) {
         this.type = type;
     }
}

如果里面的函数名不清楚的话,网上找APN设置,一大堆的资料

3.主界面里的代码为:

public class ApnNew extends Activity {
 private Button setbtn;
 private Button insertbtn;
 private Button apnexist;

@Override
 public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.apnnew);
  setbtn = (Button)this.findViewById(R.id.setApn);
  setbtn.setOnClickListener(setlis);
  insertbtn = (Button)this.findViewById(R.id.insertApn);
  insertbtn.setOnClickListener(insertlis);
  apnexist = (Button)this.findViewById(R.id.Apnexist);
  apnexist.setOnClickListener(existlis);
 }
 
 private OnClickListener setlis = new OnClickListener(){

@Override
  public void onClick(View v) {
   setCmwapAPN();
   
  }
  
 };
 
 private OnClickListener insertlis = new OnClickListener(){

@Override
  public void onClick(View v) {
   InsetAPN();
   if(apnd_id != 0)
    Toast.makeText(ApnNew.this, String.valueOf(apnd_id), Toast.LENGTH_SHORT).show();
   else
    Toast.makeText(ApnNew.this, "insertAPN is unsuccess", Toast.LENGTH_SHORT).show();
   
  }
  
 };
 
 private OnClickListener existlis = new OnClickListener(){

@Override
  public void onClick(View v) {
   int ri = checkAPN();
   if(ri == -1)
    Toast.makeText(ApnNew.this, "不存在此APN", Toast.LENGTH_SHORT).show();
   else
    Toast.makeText(ApnNew.this, "存在此APN", Toast.LENGTH_SHORT).show();
   
  }
  
 };
 
  /*
     * 入口
     * 设置指定的APN接入点
     * */
    public void setCmwapAPN()
 {
  try
  {
   if (!isCmwap())
   {
    int net_type = getNetWorkType();
    m_oldNetWorkType = net_type;
    if ((phoneSettedApnID = checkAPN()) != -1)
    {
     SetDefaultAPN(phoneSettedApnID);
    }
    else
    {
     InsetAPN();
     SetDefaultAPN(apnd_id);
    }

Thread.sleep(8000L);

}
  }
  catch (Exception e)
  {
   Log.i("setCmwapAPN error", e.getMessage());
  }
 }
    private int apnd_id = 0;
    int m_oldApnId = -1;
 int m_oldNetWorkType = -1;
    private int phoneSettedApnID = -1;//当前APNid
    private static final Uri APN_TABLE_URI = Uri.parse("content://telephony/carriers");

private static final Uri PREFERRED_APN_URI = Uri.parse("content://telephony/carriers/preferapn");
    private String getMCC()
 {
  TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
  String numeric = tm.getSimOperator();
  String mcc = numeric.substring(0, 3);
  Log.i("MCC  is", mcc);
  return mcc;
 }

private String getMNC()
 {
  TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
  String numeric = tm.getSimOperator();
  String mnc = numeric.substring(3, numeric.length());
  Log.i("MNC  is", mnc);
  return mnc;
 }
 private String getSimOperator()
 {
  TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
  String SimOperator = tm.getSimOperator();
  return SimOperator;
 }
 public ApnNode getDefaultAPN()
 {
  String id = "";
  String apn = "";
  String proxy = "";
  String name = "";
  String port = "";
  String type = "";
  String mcc = "";
  String mnc = "";
  String numeric = "";
  ApnNode apnNode = new ApnNode();
  //        Uri uri = Uri.parse("content://telephony/carriers/preferapn");
  Cursor mCursor = getContentResolver().query(PREFERRED_APN_URI, null, null, null, null);
  if (mCursor == null)
  {
   // throw new Exception("Non prefer apn exist");
   return null;

}
  while (mCursor != null && mCursor.moveToNext())
  {
   id = mCursor.getString(mCursor.getColumnIndex("_id"));
   name = mCursor.getString(mCursor.getColumnIndex("name"));
   apn = mCursor.getString(mCursor.getColumnIndex("apn")).toLowerCase();
   proxy = mCursor.getString(mCursor.getColumnIndex("proxy"));
   port = mCursor.getString(mCursor.getColumnIndex("port"));
   mcc = mCursor.getString(mCursor.getColumnIndex("mcc"));
   mnc = mCursor.getString(mCursor.getColumnIndex("mnc"));
   numeric = mCursor.getString(mCursor.getColumnIndex("numeric"));
   Log.d("getDefaultAPN", "default Apn info:" + id + "_" + name + "_" + apn + "_" + proxy + "_" + proxy);

}
  phoneSettedApnID = Integer.valueOf(id);
  apnNode.setName(name);
  apnNode.setApn(apn);
  apnNode.setProxy(proxy);
  apnNode.setPort(port);
  apnNode.setMcc(mcc);
  apnNode.setMnc(mnc);
  apnNode.setNumeric(numeric);
  return apnNode;
 }
    public boolean isCurretApn()
 {
  ApnNode apnNode = new ApnNode();
  apnNode.setName("中国电信CTNET");
  apnNode.setApn("ctnet");
  apnNode.setProxy("10.0.0.200");
  apnNode.setPort("80");
  apnNode.setMcc(getMCC());
  apnNode.setMnc(getMNC());
  apnNode.setNumeric(getSimOperator());
  ApnNode checkApn = getDefaultAPN();
  if ((apnNode.getApn().equals(checkApn.getApn()) && apnNode.getMcc().equals(checkApn.getMcc()) && apnNode.getMnc().equals(checkApn.getMnc()) && apnNode.getNumeric().equals(
    checkApn.getNumeric()))
    && (checkApn.getType() == null || "default".equals(checkApn.getType()) || "".equals(checkApn.getType())))//|| (apnNode.getApn().equals(checkApn.getApn()) && checkApn.getProxy().equals("") && checkApn.getPort().equals(""))
  {
   return true;
  }
  m_oldApnId = phoneSettedApnID;
  return false;
 }
    /**
  * 获得网络连接管理
  *
  * @return
  */
 private ConnectivityManager getConnectManager()
 {

ConnectivityManager m_ConnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

return m_ConnectivityManager;
 }
    /**
  * 获得当前联网类型wifi or mobile
  *
  * @return
  */
 private int getNetWorkType()
 {
  if (getConnectManager() != null)
  {
   NetworkInfo networkInfo = getConnectManager().getActiveNetworkInfo();
   if (networkInfo != null)
    return networkInfo.getType();
   return -1;
  }
  else
  {
   return -1;
  }
 }
    private boolean isCmwap()
 {
  int net_type = getNetWorkType();
  if (net_type == ConnectivityManager.TYPE_MOBILE)
  {
   return isCurretApn();
  }
  else if (net_type == ConnectivityManager.TYPE_WIFI)
  {
   return false;
  }
  return false;
 }
    public boolean setDefaultApn(int apnId)
 {
  boolean res = false;
  ContentResolver resolver = getContentResolver();
  ContentValues values = new ContentValues();
  values.put("apn_id", apnId);

try
  {
   resolver.update(PREFERRED_APN_URI, values, null, null);
   Cursor c = resolver.query(PREFERRED_APN_URI, new String[] { "name", "apn" }, "_id=" + apnId, null, null);
   if (c != null)
   {
    res = true;
    c.close();
   }
  }
  catch (SQLException e)
  {
  
  }
  return res;

}

public void SetDefaultAPN(int id)
 {
  setDefaultApn(id);
  ConnectivityManager cm = (ConnectivityManager) this.getSystemService(CONNECTIVITY_SERVICE);
  cm.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, "*");
  Cursor cursor = getContentResolver().query(PREFERRED_APN_URI, null, null, null, null);
  int rows = cursor.getCount();
  cursor.moveToFirst();
  String apn;
  for (int i = 0; i < rows; i++)
  {
   apn = cursor.getString(1);
   Log.e("----------------", apn);
   cursor.moveToNext();
  }

}
    //检查指定APN是否存在
    public int checkAPN()
 {
  ApnNode checkApn = new ApnNode();
  checkApn.setName("中国电信ctnet");
  checkApn.setApn("ctnet");
  checkApn.setMcc(getMCC());
  checkApn.setMnc(getMNC());
  checkApn.setNumeric(getSimOperator());
  return isApnExisted(checkApn);
 }
    public int isApnExisted(ApnNode apnNode)
 {

int apnId = -1;
  //        Uri uri = Uri.parse("content://telephony/carriers/");
  Cursor mCursor = getContentResolver().query(APN_TABLE_URI, null, null, null, null);
  while (mCursor != null && mCursor.moveToNext())
  {
   apnId = mCursor.getShort(mCursor.getColumnIndex("_id"));
   String name = mCursor.getString(mCursor.getColumnIndex("name"));
   String apn = mCursor.getString(mCursor.getColumnIndex("apn"));
   String type = mCursor.getString(mCursor.getColumnIndex("type"));
   String proxy = mCursor.getString(mCursor.getColumnIndex("proxy"));
   String port = mCursor.getString(mCursor.getColumnIndex("port"));
   String current = mCursor.getString(mCursor.getColumnIndex("current"));
   String mcc = mCursor.getString(mCursor.getColumnIndex("mcc"));
   String mnc = mCursor.getString(mCursor.getColumnIndex("mnc"));
   String numeric = mCursor.getString(mCursor.getColumnIndex("numeric"));
   Log.e("isApnExisted", "info:" + apnId + "_" + name + "_" + apn + "_" + type + "_" + current + "_" + proxy);
   if (/*apnNode.getName().equals(name)*/(apnNode.getApn().equals(apn) && apnNode.getMcc().equals(mcc) && apnNode.getMnc().equals(mnc) && apnNode.getNumeric().equals(numeric))
     && (type == null || "default".equals(type) || "".equals(type)))//|| (apnNode.getApn().equals(apn) && "".equals(proxy) && "".equals(port))
   {
    return apnId;
   }
   else
   {
    apnId = -1;
   }

}
  return apnId;
 }
    public int addNewApn(ApnNode apnNode)
 {
  int apnId = -1;
  ContentResolver resolver = getContentResolver();
  ContentValues values = new ContentValues();
  values.put("name", apnNode.getName());
  values.put("apn", apnNode.getApn());
  values.put("proxy", apnNode.getProxy());
  values.put("port", apnNode.getPort());
  values.put("user", apnNode.getUser());
  values.put("password", apnNode.getPassword());
  values.put("mcc", apnNode.getMcc());
  values.put("mnc", apnNode.getMnc());
  values.put("numeric", apnNode.getNumeric());
  // Note: this values need to be update, and for now, it only for XT800.

Cursor c = null;
  try
  {
   Uri newRow = resolver.insert(APN_TABLE_URI, values);
   if (newRow != null)
   {
    c = resolver.query(newRow, null, null, null, null);
    
    int idindex = c.getColumnIndex("_id");
    c.moveToFirst();
    apnId = c.getShort(idindex);
    Log.d("Robert", "New ID: " + apnId + ": Inserting new APN succeeded!");
   }
  }
  catch (SQLException e)
  {
   
  }

if (c != null)
   c.close();

return apnId;
 }
    //添加一个APN
    private void InsetAPN()
 {
  ApnNode checkApn = new ApnNode();
  checkApn.setName("中国电信CTNET");
  checkApn.setApn("ctnet");
//  checkApn.setProxy("10.0.0.200");
//  checkApn.setPort("80");
  checkApn.setUser("card");
  checkApn.setPassword("card");
  checkApn.setMcc(getMCC());
  checkApn.setMnc(getMNC());
  checkApn.setNumeric(getSimOperator());
  apnd_id = addNewApn(checkApn);
 }
}

4.主界面的xml文件为:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/widget28"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<Button
android:id="@+id/setApn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="设置Apn"
>
</Button>
<Button
android:id="@+id/insertApn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="插入一个APN"
>
</Button>
<Button
android:id="@+id/Apnexist"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="判断指定APN是否存在"
>
</Button>
</LinearLayout>

只要是开发过android的肯定清楚这些代码和界面吧,我也不多解释了,如果哥们你看不懂,那就是说明你还没弄清android开发,先去补补课再来看

添加APN网络接入点,设置指定网络为默认网络相关推荐

  1. linux7主机名设置,centos7主机名、网络设置

    设置主机名 rhel7不再使用/etc/sysconfig/network设置主机名,而是使用/etc/hostname文件,下面就介绍有关rhel7设置主机名的几种方法. 方法:1 修改/etc/h ...

  2. 虚拟机连接网络_Parallels Desktop 16教程PD16虚拟机共享网络和桥接网络设置方法

    许多用户在Mac上安装Parallels Desktop 16之后,想要设置Mac与虚拟机共享网络,那么共享网络和桥接网络设置有什么不同?该怎样设置?本篇就为大家分享PD16虚拟机共享网络和桥接网络设 ...

  3. 树莓派有线网络设置_树莓派的基本网络配置

    树莓派(Raspberry Pi)是如图所示的小电路板,别看它只有卡片大小,但它却能够运行Linux系统,树莓派拥有USB接口,可以连接鼠标键盘,还有HDMI口,可以连接显示器,除此之外,树莓派还提供 ...

  4. TStack运维笔记(04)- 配置VPC网络及告警设置

    文章目录 01 VPC配置 1.1 说明 1.2 操作步骤 02 告警设置 2.1 说明 2.2 操作步骤 01 VPC配置 1.1 说明 用户可以通过创建 虚拟私有网络(VPC) 为云主机构建隔离的 ...

  5. Android之连接指定SSID的无线网络

    SSID指的是无线网络的名称全程为Service Set Identifier 通过查阅网上资料找到了连接指定SSID的方法,无线网络可以是三种简单的方式 1. 无加密 2. wep加密 3. wpa ...

  6. 二层网络及三层网络的子网掩码设置原则

    1 网络基本知识 推荐首先读下这篇文章,形象化的描述了各网络术语的含义:计算机主机网关的作用是什么?(转 ) 1.1 OSI七层网络模型 对于物理层而言打交道的基本都是电信号和光信号,例如网卡.光纤. ...

  7. “无任何网络提供程序接受指定的网络路径”的解决办法

    症状: 1.可以正常上网,浏览网页,登陆msn等,但无法访问局域网,通过ip地址可以ping通局域网机器,但无法通过pcname ping通: 2."开始" "运行&qu ...

  8. samba服务器 安装与配置、解决Windows访问Samba提示“无任何网络提供程序接受指定的网络路径”

    最近学习linux 其中有个samba服务可以解决windows和linux互访,界面相当于访问windows之间共享访问.界面亲切.故学习学习.. 先下载samba服务器的rpm 包括三个文件. 查 ...

  9. xp系统usb android,xp系统usb手机网络共享怎么设置,xp设置usb手机网络分享的方法

    随着智能手机的不断普及,如今通过USB数据线将手机与计算机绑定,从而实现计算机共享手机的互联网连接早已成为现实.但于对于Android类型的智能手机而言,通常情况下支持的绑定只限于Windows Vi ...

最新文章

  1. 【怎样写代码】小技巧 -- 关于引用类型的两种转换方式
  2. php 工资 2018,2018年我国公务员级别工资标准
  3. 计算机二级python基础知识总结-计算机二级python 知识点篇(程序的控制结构)...
  4. 安卓socks5代理客户端_内网Mysql代理浅析
  5. [ZJOI2015] 地震后的幻想乡(状压dp + 期望)
  6. Java高级语法笔记-异常中finally的使用
  7. if判断用户名 linux,Shell脚本IF条件判断和判断条件总结
  8. PTA-1021—— Deepest Root(最后两组数据错误)
  9. python和c++哪个好-关于python和c语言学哪个好
  10. D3.js学习(一)
  11. win10安装pyhive包
  12. 基于R语言的Meta分析(全流程、不确定性分析)方法与Meta机器学习
  13. [sql面试经验] 经典sql面试题及答案第3期
  14. java文件上传与下载
  15. 【自学Flutter】3.2 图片的填充样式
  16. JAVA基础之HttpServletResponse响应
  17. CSS进阶之基线(参考线)
  18. ajax请求是宏任务还是微任务_好程序员web前端学习路线分享了解AJAX是什么
  19. python opencv根据颜色进行目标检测
  20. R语言中类别为‘closure‘的对象不可以取子集(Error:object of type ‘closure‘ is not subsettable)

热门文章

  1. 强制卸载lync server 的CMS
  2. 数控雕刻机控制器_数控雕刻机系统
  3. 【超图+CESIUM】【基础API使用示例】43、超图|CESIUM - 绘制编辑面|读取kml文件绘制编辑|导出kml面数据
  4. [生存志] 第125节 针道针具取穴
  5. diamond安装与使用
  6. python爬取微博评论数据的github链接_GitHub - guozifeng91/weiboSpider: 新浪微博爬虫,用python爬取新浪微博数据...
  7. perf-tools
  8. 分享一些我的学习方法
  9. 第一次面试前端实习生心得
  10. 国内可用的ntp服务器地址