操作APN的工具类

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

工具类

package com.example.apnutil;
 
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.net.Uri;
import android.telephony.TelephonyManager;
import android.util.Log;
 
public class ApnUtil {
    private Context context;
    private int apnd_id = 0;
    int m_oldApnId = -1;
    int m_oldNetWorkType = -1;
    private TelephonyManager tm;
    private ContentResolver resolver;
    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");
 
    public ApnUtil(Context context) {
        super();
        this.context = context;
        resolver = context.getContentResolver();
        tm = (TelephonyManager) context
                .getSystemService(Context.TELEPHONY_SERVICE);
    }
 
 
 
    /**
     * 判断一个apn是否存在 存在返回id
     * 
     * @param apnNode
     * @return
     */
    public int isApnExisted(ApnEntity apnNode) {
 
        int apnId = -1;
        Cursor mCursor = resolver.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);// 遍历了所有的apn
            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;
    }
 
    /**
     * 获取默认的apn
     */
    public ApnEntity getDefaultAPN() {
        String id = "";
        String apn = "";
        String proxy = "";
        String name = "";
        String port = "";
        String type = "";
        String mcc = "";
        String mnc = "";
        String numeric = "";
        ApnEntity apnNode = new ApnEntity();
        Cursor mCursor = resolver.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);
 
        }
        apnNode.setName(name);
        apnNode.setApn(apn);
        apnNode.setProxy(proxy);
        apnNode.setPort(port);
        apnNode.setMcc(mcc);
        apnNode.setMnc(mnc);
        apnNode.setNumeric(numeric);
        return apnNode;
    }
 
    /**
     * 设置默认的apn
     * 
     * @param apnId
     * @return
     */
 
    public boolean setDefaultApn(int apnId) {
        boolean res = false;
        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;
 
    }
 
    /**
     * 删除所有apn
     */
    public void deleteApn() {
 
        resolver.delete(APN_TABLE_URI, null, null);
 
    }
 
    /**
     * 增加新的apn
     * 
     * @param apnNode
     * @return
     */
    public int addNewApn(ApnEntity apnNode) {
        int apnId = -1;
        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;
    }
 
    public String getMCC() {
        String numeric = tm.getSimOperator();
        String mcc = numeric.substring(0, 3);
        Log.i("MCC  is", mcc);
        return mcc;
    }
 
    public String getMNC() {
 
        String numeric = tm.getSimOperator();
        String mnc = numeric.substring(3, numeric.length());
        Log.i("MNC  is", mnc);
        return mnc;
    }
 
    public String getSimOperator() {
        String SimOperator = tm.getSimOperator();
        return SimOperator;
    }
 
}

实体
package com.example.apnutil;
 
/**
 * apn实体
 */
public class ApnEntity {
 
    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;
    }
}

测试activity
package com.example.apnutil;
 
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
 
public class MainActivity extends Activity {
 
    private ApnUtil apnUtil;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        apnUtil = new ApnUtil(this);
        //initApn();
        restoreApn();
         
    }
     
     
    /**
     * 恢復爲移動的apn
     */
    private void restoreApn() {
            ApnEntity checkApn = new ApnEntity();
            checkApn.setName("中国移动");
            checkApn.setApn("cmnet");
            checkApn.setUser("");
            checkApn.setPassword("");
            checkApn.setMcc(apnUtil.getMCC());
            checkApn.setMnc(apnUtil.getMNC());
            checkApn.setNumeric(apnUtil.getSimOperator());
            int apnId = apnUtil.isApnExisted(checkApn);
            if (apnId==-1) {
                Log.e("apn", "不存在apn创建一个"+apnId);
                apnId = apnUtil.addNewApn(checkApn);
            }
            apnUtil.setDefaultApn(apnId);
         
         
    }
    /**
     * 初始化一個apn 并设置为默认
     */
    private void initApn() {
        ApnEntity checkApn = new ApnEntity();
        checkApn.setName("三方平台接口");
        checkApn.setApn("lsrs.qd.sd");
        checkApn.setUser("");
        checkApn.setPassword("");
        checkApn.setMcc(apnUtil.getMCC());
        checkApn.setMnc(apnUtil.getMNC());
        checkApn.setNumeric(apnUtil.getSimOperator());
        int apnId = apnUtil.isApnExisted(checkApn);
        if (apnId==-1) {
            Log.e("apn", "不存在apn创建一个"+apnId);
            apnId = apnUtil.addNewApn(checkApn);
        }
        apnUtil.setDefaultApn(apnId);
    }
 
    @Override
    public 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;
    }
 
}