首页 > 解决方案 > 如何在 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,我们需要获得设备所有者的许可。这是对的吗?那么我应该为这个问题做些什么呢?如果你能解释一下,我们会很有帮助。

标签: androidandroid-permissionssecurityexceptionapn

解决方案


推荐阅读