Set APN programmatically on Android

前端 未结 3 819
无人共我
无人共我 2020-12-09 21:15

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 ther

相关标签:
3条回答
  • 2020-12-09 21:31

    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;
    
    0 讨论(0)
  • 2020-12-09 21:34

    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);
        }
    
    0 讨论(0)
  • 2020-12-09 21:43

    This might not answer your question directly. Have a look at this . Though keep in mind that this code is for reference only 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.

    0 讨论(0)
提交回复
热议问题