Android apn网络接入点的管理

Android apn网络接入点的管理

前言

这个月在做手机适配的时候有遇到这样的情况,当手机的apn接入点选择wap的时候机器连接不上网络,但当接入点设置为net的时候就可以.依据coopad方面提供的解决方案和研究了电信的apn策略之后,在程序中添加对手机接入点的判断,如若当前软件不能访问网络就对接入点类型进行判断,如是wap,那有弹出提示是否要切换apn接入点,当用户选择了需要切换接入点时,先将原有的接入点保存起来,待用户退出软件后再还原.

1.      apn接入点的管理

apn的管理,无非就是能够查询apn,添加apn,修改apn和删除apn.apn的查询有2中方式,一种是通过ConnectivityManager,另一种是直接访问数据库来查询.

1)      通过ConnectivityManager查询apn

Context context = mActivity.getApplicationContext();

ConnectivityManager connectivity =

(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo[] info = connectivity.getAllNetworkInfo();

如此info中就可获取当前所有的apn的信息.

2)      直接访问数据库来查询

直接访问content://telephony/carriers/preferapn数据库,并对其查询集进行遍历

private static final Uri PREFERRED_APN_URI =

Uri.parse("content://telephony/carriers/preferapn");

        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 class ApnNode {

        private String _id;

        private String name;

        private String numeric;

        private String mcc;

        private String mnc;

        private String apn;

        private String user;

        private String server;

        private String password;

        private String proxy;

        private String port;

        private String mmsproxy;

        private String mmsport;

        private String mmsc;

        private String authtype;

        private String type;

        private String current;

        private String isDefault;

        private String dialnumber;

        //setter…

        //gettet…

}

 

3)      添加apn

    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;

    }

4)      修改apn

       ContentResolver resolver = getContentResolver();

        ContentValuesvalues = 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) {

        }

5)      删除apn

ContentResolver resolver = getContentResolver();

        ContentValuesvalues = new ContentValues();

        values.put("apn_id", apnId);

        try {

            resolver.delete

(PREFERRED_APN_URI, new String[] { "apn" }, "_id=" + apnId, null, null);

            if (c != null) {

                res = true;

                c.close();

            }

        }catch (SQLException e) {

        }

6)      判断是否是wap类型

    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;

    }

        private int getNetWorkType() {

            if (getConnectManager() != null) {

NetworkInfo networkInfo = getConnectManager().getActiveNetworkInfo();

                if (networkInfo != null)

                    return networkInfo.getType();

            return -1;

            } else {

                return -1;

            }

    }

转载于:https://my.oschina.net/HandyWorkGroup/blog/75555

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值