阅读Android 4.2中的APN?

Sha*_*one 10 android apn

我在Android v4.2中读取APN时遇到问题(是的,不是写APNS),它引发了一个安全异常:

无权编写APN设置:用户10068和当前进程都没有android.permission.WRITE_APN_SETTINGS.

用于在以前所有平台上运行的相同代码,有没有人知道任何相关的工作?

谢谢!

vin*_*091 9

如果您想阅读适用于Android 4.2及更多版本的APN,则可以进行更改.我测试了它的工作.

在Android 4.1及更低版本中使用此:

Cursor c = getContentResolver().query(Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current"), null, null, null, null);
Run Code Online (Sandbox Code Playgroud)

对于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
 };
Run Code Online (Sandbox Code Playgroud)

这一行:

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

SQLiteWrapperClass是隐藏的(在互联网上找到这个类)

import android.database.sqlite.SqliteWrapper;
Run Code Online (Sandbox Code Playgroud)

我的英语不太好,对不起.

  • 在api 19中,这不是问题.Carriers类可以使用这个import import android.provider.Telephony; 如果这不起作用,请在源代码中获取java类并导入到src文件夹中. (2认同)
  • 它不适用于android 4.2.2.any建议 (2认同)

Com*_*are 8

这似乎是一次故意的改变.他们添加此防御git提交包括以下注释:

由于数据库可能包含公司密码,我们应该保护它.使用与写入DB相同的权限作为读取可能与写入一样具有破坏性.

可以想象,您的问题将导致他们考虑添加单独的读取权限,但至少目前,这是4.2中的回归.