Если вы хотите заблокировать пользователей от удаления вашего приложения, вы можете зарегистрироваться как Device Admin , чтобы предотвратить удаление (пользователи должны отменить регистрацию, чтобы иметь возможность удалить ваше приложение), здесь это пример того, как это сделать, оттуда, я полагаю, вы можете ограничить открытие приложения настроек Android (пользователи должны открывать, чтобы отменить регистрацию вашего приложения в качестве администратора устройства), здесь как сделайте это, и имя пакета приложения настроек будет com.android.settings
.
Второй ответ о том, как обнаружить удаление приложения:
Боюсь, что нет официального способа обнаружить всплывающее окно удаления, даже если у вас есть права администратора устройства, но есть какой-то хакерский способ сделать это, проверьте его здесь , это не так идеально и имеет свои ограничения, но это все же лучше, чем ничего.
Оригинальный ответ на вопрос, как запросить удаление приложения:
Вам не нужны средства администратора устройства, чтобы предлагать удалить ваше приложение, вы можете просто использовать намерение для запуска запроса на удаление, который вы запрашивали, вот так:
Uri packageUri = Uri.parse("package:APP_PACKAGE_NAME");
Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageUri);
startActivity(uninstallIntent);
Примечание : указанное выше намерение ACTION_UNINSTALL_PACKAGE доступно только после API 14 (Android 4.0), если ваше приложение предназначено для Android P и выше, вам необходимо добавить разрешение REQUEST_DELETE_PACKAGE на ваш AndroidManifest
. Кроме того, это намерение устарело, начиная с Android Q, в этой ситуации вы должны использовать PackageInstaller.uninstall()
, например:
String packageName = "com.your.app.package";
Intent intent = new Intent(getActivity(), getActivity().getClass());
PendingIntent sender = PendingIntent.getActivity(getActivity(), 0, intent, 0);
PackageInstaller packageInstaller = getActivity().getPackageManager().getPackageInstaller();
packageInstaller.uninstall(packageName, sender.getIntentSender());
Существует целый ряд ограничений, подробнее см. Документацию .