简体   繁体   中英

Set APN programmatically on Android

In my Android application I would like get all the available APNs and check if the client APN is available. I would like to run my app using this client APN.

Is there a way to achieve this on Android?

This might not answer your question directly. Have a look at this . Though keep in mind that this code is for and should not be used in your app. ,不应在您的应用中使用。

To get defined APN:

Cursor c = getContentResolver().query(Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current"), null, null, null, null);

And then refer to Telephony.Carriers for relevant columns.

If you want to read the APN for Android 4.2 and more they are a change to do. I tested it, and it works.

In Android 4.1 and above use this:

Cursor c = getContentResolver().query(Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current"), null, null, null, null);

And for Android 4.2 and more use this code:

private static final String[] APN_PROJECTION = {
     Telephony.Carriers.TYPE,            // 0
     Telephony.Carriers.MMSC,            // 1
     Telephony.Carriers.MMSPROXY,        // 2
     Telephony.Carriers.MMSPORT          // 3
 };

And this line:

final Cursor apnCursor =SqliteWrapper.query(context, this.context.getContentResolver(), Uri.withAppendedPath(Carriers.CONTENT_URI, "current"), APN_PROJECTION, null, null, null);

The SQLiteWrapperClass is hidden (I found this class on the Internet).

import android.database.sqlite.SqliteWrapper;

You will need the permission:

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

The code:

 private void addApn(Intent intent) {
        final String apn = intent.getStringExtra(APN_EXTRA_APN);
        final String name = intent.getStringExtra(APN_EXTRA_NAME);
        final String type = intent.getStringExtra(APN_EXTRA_TYPE);
        final String proxy = intent.getStringExtra(APN_EXTRA_PROXY);
        final int mnc = intent.getIntExtra(APN_EXTRA_MNC, 6);
        final int mcc = intent.getIntExtra(APN_EXTRA_MCC, 724);
        final String user = intent.getStringExtra(APN_EXTRA_USER);
        final String password = intent.getStringExtra(APN_EXTRA_PASSWORD);
        final String server = intent.getStringExtra(APN_EXTRA_SERVER);

        final ContentResolver cr = mContext.getContentResolver();
        ContentValues values = new ContentValues();
        values.put(Telephony.Carriers.APN, apn);
        values.put(Telephony.Carriers.NAME, name);
        values.put(Telephony.Carriers.TYPE, type);
        values.put(Telephony.Carriers.PROXY, proxy);
        values.put(Telephony.Carriers.MNC, mnc);
        values.put(Telephony.Carriers.MCC, mcc);
        values.put(Telephony.Carriers.USER, user);
        values.put(Telephony.Carriers.PASSWORD, password);
        values.put(Telephony.Carriers.SERVER, server);
        cr.insert(Telephony.Carriers.CONTENT_URI, values);
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM