Как получить разрешение владельца устройства в Android? - PullRequest
0 голосов
/ 09 февраля 2020

Я работаю с мобильным приложением, и мне нужно разрешить пользователям приложения создавать настраиваемые APN (имя точки доступа) . Итак, согласно документации разработчика 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 нам нужно получить разрешение владельца устройства. Это правильно? Так что я должен сделать для этой проблемы? Если вы можете объяснить это, мы очень поможем.

...