Приложение уже назначено владельцем профиля, но больше не может его удалить

У меня есть класс AdminReceiver, расширяющий DeviceAdminReceiver в моем приложении. Раньше я делал это владельцем профиля через оболочку ADB

adb shell dpm set-active-admin com.example.myApp/com.example.myApp.AdminReceiver 
adb shell dpm set-profile-owner com.example.myApp/com.example.myApp.AdminReceiver

И все прошло нормально. Впоследствии я хотел удалить его, выполнив следующую инструкцию из моего приложения программно:

DevicePolicyManager dpm = (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
    try {
        dpm.clearProfileOwnerApp(packageName);
    } catch (Exception e) {
        Log.e(TAG, "removingProfile: ", e);
    }

И получается следующее исключение:

java.lang.SecurityException: Admin ComponentInfo{com.example.myApp/com.example.myApp.AdminReceiver} does not own the profile

.

Когда я снова пытаюсь установить владельца профиля через ADB, я получаю следующее исключение

java.lang.IllegalStateException: Trying to set the profile owner, but profile owner is already set

.

Это безумие, потому что, когда я пытаюсь удалить владельца профиля, кажется, что у него его нет, а если я пытаюсь сделать его владельцем профиля, похоже, что он уже есть!

Есть ли какое-то решение без сброса настроек устройства?

0 ответов

Столкнулся с той же проблемой, наконец нашел решение.

Установить скрипт

       adb install app.apk
adb shell dpm set-device-owner [your.package]/.DeviceAdminReceiver

Удалить скрипт

       adb install -r -t app-testOnly.apk
adb shell dpm remove-active-admin [your.package]/.DeviceAdminReceiver
adb shell pm uninstall [your.package]

Примечание. Сначала вам необходимо создать версию приложения testOnly. Также, если фактическое приложение было подписано, testOnly должен быть подписан тем же сертификатом.

Другие вопросы по тегам