android - 如何在 Android 中获得设备所有者权限?
问题描述
我正在使用移动应用程序,我需要允许应用程序用户创建自定义APN(Access Point Name)。所以根据android开发者文档。我做了如下
String host = "mms.example.com";
byte[] ipAddress = new byte[4];
InetAddress mmsProxy;
try {
mmsProxy = InetAddress.getByAddress(host, ipAddress);
} catch (UnknownHostException e) {
e.printStackTrace();
return;
}
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.P) {
ApnSetting apn = new ApnSetting.Builder()
.setApnName("Hutch")
.setEntryName("APN")
.setMmsc(Uri.parse("http://mms.example.com:8002"))
.setMmsProxyAddress(mmsProxy)
.setMmsProxyPort(8799)
.setOperatorNumeric("123456789")
.setProxyPort(123)
.setUser("testUser")
.setPassword("testPassword")
.setAuthType(ApnSetting.AUTH_TYPE_CHAP)
.setApnTypeBitmask(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_EMERGENCY)
.setProtocol(ApnSetting.PROTOCOL_IPV4V6)
.setRoamingProtocol(ApnSetting.PROTOCOL_IPV4V6)
.setNetworkTypeBitmask(TelephonyManager.NETWORK_TYPE_CDMA)
.setMvnoType(ApnSetting.MVNO_TYPE_GID)
.setCarrierEnabled(true)
.build();
DevicePolicyManager pm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName cm = new ComponentName(context, OperationManager.class);
int insertedId = pm.addOverrideApn(cm,apn); //the exception is throwing in here
if (insertedId == -1) {
Log.e(TAG,"********unsuccess*********");
} else {
Log.i(TAG,"********success*********" + insertedId);
}
}
但有一个例外如下。
E/Volley: [4680] NetworkDispatcher.processRequest: Unhandled exception java.lang.SecurityException: No active admin ComponentInfo{io.khd.agent/org.kdh.services.operation.OperationManager}
java.lang.SecurityException: No active admin ComponentInfo{io.kdh.agent/org.kdh.services.operation.OperationManager}
at android.os.Parcel.createException(Parcel.java:1966)
at android.os.Parcel.readException(Parcel.java:1934)
at android.os.Parcel.readException(Parcel.java:1884)
at android.app.admin.IDevicePolicyManager$Stub$Proxy.addOverrideApn(IDevicePolicyManager.java:11791)
at android.app.admin.DevicePolicyManager.addOverrideApn(DevicePolicyManager.java:10785)
异常是从int insertedId = pm.addOverrideApn(cm,apn);
行中抛出的。我认为要创建自定义 APN,我们需要获得设备所有者的许可。这是对的吗?那么我应该为这个问题做些什么呢?如果你能解释一下,我们会很有帮助。
解决方案
推荐阅读
- sql - 跨行的 SQL DISTINCT 值
- docker - 为什么对象检测模型在不同的机器上给出不同的结果
- android - Android上无法识别的设备
- android - 在 inappbrowser Phonegap webview 应用程序顶部显示自定义导航
- python - 如何在不使用 Google Drive 的情况下导入外部 python 文件
- r - 如何通过合并 grep 函数来计算数据集中的多个变量?
- html - ng-show 和 get element by id 都不能在 ng-repeat 表中工作?
- java - 尝试在 jdbc ignite 瘦客户端中提供多个 IP
- oracle - Oracle 数据泵导出 - 如何包含具有特定模式和名称的序列?
- c# - ASP.NET Web 表单中的全局错误处理