【发布时间】:2017-05-30 01:37:12
【问题描述】:
在我的 Android 应用程序中,我想获取所有可用的 APN 并检查客户端 APN 是否可用。我想使用这个客户端 APN 运行我的应用程序。
有没有办法在 Android 上实现这一点?
【问题讨论】:
标签: android
在我的 Android 应用程序中,我想获取所有可用的 APN 并检查客户端 APN 是否可用。我想使用这个客户端 APN 运行我的应用程序。
有没有办法在 Android 上实现这一点?
【问题讨论】:
标签: android
这可能无法直接回答您的问题。看看this。但请记住,此代码仅供参考,不应在您的应用中使用。
要获得定义的 APN:
Cursor c = getContentResolver().query(Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current"), null, null, null, null);
然后参考Telephony.Carriers相关栏目。
【讨论】:
java.lang.SecurityException: No permission to write APN settings: Neither user 10099 nor current process has android.permission.WRITE_APN_SETTINGS.
如果您想阅读适用于 Android 4.2 及更多版本的 APN,则需要进行更改。我测试了它,它可以工作。
在 Android 4.1 及更高版本中使用:
Cursor c = getContentResolver().query(Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current"), null, null, null, null);
对于 Android 4.2 及更高版本,请使用以下代码:
private static final String[] APN_PROJECTION = {
Telephony.Carriers.TYPE, // 0
Telephony.Carriers.MMSC, // 1
Telephony.Carriers.MMSPROXY, // 2
Telephony.Carriers.MMSPORT // 3
};
还有这一行:
final Cursor apnCursor =SqliteWrapper.query(context, this.context.getContentResolver(), Uri.withAppendedPath(Carriers.CONTENT_URI, "current"), APN_PROJECTION, null, null, null);
SQLiteWrapperClass 是隐藏的(我在网上找到了这个类)。
import android.database.sqlite.SqliteWrapper;
【讨论】:
您将需要许可:
<uses-permission android:name="android.permission.WRITE_APN_SETTINGS" />
代码:
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);
}
【讨论】: