Android apn網絡接入點的管理

Android apn網絡接入點的管理數據庫

前言

這個月在作手機適配的時候有遇到這樣的狀況,當手機的apn接入點選擇wap的時候機器鏈接不上網絡,但當接入點設置爲net的時候就能夠.依據coopad方面提供的解決方案和研究了電信的apn策略以後,在程序中添加對手機接入點的判斷,如若當前軟件不能訪問網絡就對接入點類型進行判斷,如是wap,那有彈出提示是否要切換apn接入點,當用戶選擇了須要切換接入點時,先將原有的接入點保存起來,待用戶退出軟件後再還原.網絡

1.      apn接入點的管理oop

apn的管理,無非就是可以查詢apn,添加apn,修改apn和刪除apn.apn的查詢有2中方式,一種是經過ConnectivityManager,另外一種是直接訪問數據庫來查詢.this

1)      經過ConnectivityManager查詢apnspa

Context context = mActivity.getApplicationContext();orm

ConnectivityManager connectivity = server

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

NetworkInfo[] info = connectivity.getAllNetworkInfo();get

如此info中就可獲取當前全部的apn的信息.it

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;

            }

    }

相關文章
相關標籤/搜索