введите здесь описание изображения
Я создал приложение владельца устройства, но не могу установить его на реальном устройстве. Я генерирую Qr-код, используя https://datalogic.github.io/aeqrdoc/generat.
Текст, который я использую для создания QR-кода:
{ "android.app.extra.PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME": "com.example.demo/com.example.demo.DemoAppDeviceAdminReceiver", "android.app.extra.PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM": "DyseoYKEDCtnYx3jyiHCdLUvZ7F-uFenEe4sZ9bRZYw", "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION": "https://www.dropbox.com/scl/fi/q6094arg ... m7ppc&dl=1" } Я создаю свой apk из студии Android следующим образом: Сборка -> Создать подписанный пакет/Apk-> выбрать APK-> Создать новое хранилище ключей -> ОК -> Далее-> Выберите «Выпустить» -> Сборка. Затем я создаю контрольную сумму пакета, используя
cat /mnt/c/Users/Antarpuneet/app-release.apk | openssl dgst -binary -sha256 | OpenSSL Base64 | tr '+/' '-_' | тр -д '=' После сброса настроек к заводским настройкам при 6-кратном нажатии на экран приветствия открывается приложение для чтения QR-кодов, я сканирую код, а затем попадаю на экран подключения к Wi-Fi и успешно подключаюсь к Интернету. Пишет Настройка устройства.. но возвращается с ошибкой «Невозможно настроить устройство — не удалось установить приложение администратора».
Это класс DemoAppDeviceAdminReceiver :-
пакет com.example.demo; импортировать статический android.content.ContentValues.TAG; импортировать android.app.admin.DeviceAdminReceiver; импортировать android.content.ComponentName; импортировать android.content.Context; импортировать android.content.Intent; импортировать android.util.Log; импортировать android.widget.Toast; публичный класс DemoAppDeviceAdminReceiver расширяет DeviceAdminReceiver { // Необязательно: переопределить методы, необходимые для обработки событий администратора устройства. // Например: @Override public void onEnabled (контекст контекста, намерение) { // Администратор устройства включен super.onEnabled(контекст, намерение); Log.d(TAG, «Владелец устройства включен»); Toast.makeText(context, «DemoAppDeviceAdminReceiver: Включить администратора устройства», Toast.LENGTH_SHORT).show(); } @Override public CharSequence onDisableRequested (контекст контекста, намерение намерения) { // Возвращаем сообщение, когда пользователь пытается отключить администратора устройства return «Отключение администратора этого устройства приведет к удалению важных функций.»; } // Другие переопределения для событий администратора по мере необходимости static ComponentName getComponentName (контекст контекста) { вернуть новое имя компонента (context.getApplicationContext(), DemoAppDeviceAdminReceiver.class); } } Моя основная деятельность:-
пакет com.example.demo; импортировать android.app.Activity; импортировать android.app.admin.DevicePolicyManager; импортировать android.content.ComponentName; импортировать android.content.Context; импортировать android.content.Intent; импортировать android.os.Bundle; импортировать android.util.Log; импортировать android.widget.Toast; импортировать androidx.annotation.Nullable; импортировать androidx.appcompat.app.AppCompatActivity; публичный класс MainActivity расширяет AppCompatActivity { частный int YOUR_REQUEST_CODE = 100; @Override protected void onCreate (Bundle saveInstanceState) { super.onCreate(saveInstanceState); setContentView(R.layout.activity_main); ComponentName adminComponentName = новое ComponentName(this, DemoAppDeviceAdminReceiver.class); DevicePolicyManager devicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); //TODO: запросить активацию администратора устройства Намерение намерение = новое намерение (DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); Intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, adminComponentName); Intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, «Объяснение того, почему вашему приложению необходим доступ администратора устройства»); //TODO: запустить действие, которое предложит пользователю предоставить приложению права администратора устройства. startActivityForResult (намерение, YOUR_REQUEST_CODE); //TODO: проверить, является ли приложение администратором устройства или нет. логическое значение isAdminActive = devicePolicyManager.isAdminActive(adminComponentName); если (isAdminActive) { // Ваше приложение является администратором устройства Toast.makeText(this, «Ваше приложение является администратором устройства», Toast.LENGTH_SHORT).show(); } еще { // Ваше приложение не является администратором устройства Toast.makeText(this, «Ваше приложение не является администратором устройства», Toast.LENGTH_SHORT).show(); } //TODO: проверить, является ли приложение владельцем устройства или нет. if (devicePolicyManager.isDeviceOwnerApp("com.example.demo")) { Toast.makeText(this, "ДА", Toast.LENGTH_SHORT).show(); Log.i("Статус", "Да"); } еще { Toast.makeText(this, «НЕТ», Toast.LENGTH_SHORT).show(); Log.i("Статус", "Нет"); } // devicePolicyManager.reboot(adminComponentName); } [введите описание изображения здесь](

device_admin_receive.xml :-
Что я уже пробовал:
Установка приложения на эмуляторе с помощью команды оболочки adb оболочка adb dpm set-device-owner com.example.demo/.DemoAppDeviceAdminReceiver
Приложение успешно назначается владельцем устройства.
Установка приложения на реальном устройстве (после сброса настроек и пропуска страницы входа в систему) с помощью команды adb, указанной выше. Он успешно настраивает приложение в качестве владельца устройства. Думаю, это означает, что проблема в QR-коде.
Я пытаюсь установить его на устройство с Android версии 13.
Теперь мое приложение загружается, но при установке появляется сообщение «Заблокировано Play Protect», и когда я нажимаю «Все равно установить», оно возвращается со старой ошибкой: «Невозможно настроить устройство — не удалось установить приложение администратора» < /п>