Вопрос по android – Как показать активность ДО того, как мое приложение будет удалено (Android) [дубликат]
This ques#ion already has an answer here:
Is i# possible #o de#ec# Android app unins#all? 7 answers Perform a #ask on unins#all in android [duplica#e] 4 answersХотя это было невозможно, но я заметил, что NQ Mobile Securi#y может отображать сообщение после того, как я нажму «Удалить» и перед вызовом PackageUnins#aller. Я хотел бы повторить это поведение в моем приложении.
Я пытался с помощью Ac#ivi#y прослушивать "android.in#en#.ac#ion.DELETE" quo#; Намерение, как предлагается здесь: Как узнать, что мое приложение удалено с устройства ...?
Но когда я собираюсь удалить свое приложение, появляется окно выбора с просьбой выбрать мое приложение или программу удаления пакета. Как я могу избежать этого?
Есть ли другой способ перехватить событие UNINSTALL вашего приложения? (прежде чем ответить, что это невозможно, попробуйте удалить NQ Mobile Securi#y и посмотреть, что произойдет. На моем Android 2.3.4 отображается хороший экран с надписью, что без приложения безопасности не безопасно).
что они контролируют LogCat для перехвата, когда Activity Manager вызывает PackageUninstaller. Я думаю, что они убивают задачу и начинают свою собственную деятельность. Это довольно умно, но оно определенно использует дыру в безопасности в Android.
которое делает нечто подобное - после удаления открывает веб-страницу.
Как они это делают?
Используя libevent из собственного кода, они просматривают каталог /data/data/com.opera.max, который необходимо удалить, и затем публикуют старые добрые сообщения action.VIEW, когда это происходит.
Установите их приложение, запустите его и на рутированном устройстве из оболочки adb удалите каталог /data/data/com.opera.max
ОБНОВЛЕНИЕ: я создал пример приложения, которое показывает, как оно работает. Кстати, он не работает с последними (я думаю, KitKat +) версиями Android:https://github.com/pelotasplus/ActionAfterUninstall
https://stackoverflow.com/a/26829978/1317564Вот пример кода, который делает это:https://github.com/zzljob/android-uninstall-feedback/blob/master/library/jni/feedback-uninstall.c, Это на самом деле не остановит деинсталляцию, но предоставляет способ отловить ее и предпринять некоторые действия. Я искренне удивлен, что это работает в Android, и команда, возможно, восполнила пробел в последних выпусках.
ick on Uninstall and before the PackageUninstaller is called
Должно быть, они используют какой-то недостаток безопасности в Android. Я исследую это и посмотрю, смогу ли я это исправить. Приложения не должны получить контроль во время удаления.
Спасибо за указание на это!
Is there a different way to intercept your application UNINSTALL event?
Я надеюсь, что нет.
они запрашивают очень критическое разрешение, которое пользователь дает им по незнанию. Посмотрите на & quot; Разрешения & quot; Вкладка для этого приложения (по состоянию на 15.06.2012):https://play.google.com/store/apps/details?id=com.nqmobile.antivirus20&hl=en.
Список разрешений, которые получает это приложение, совершенно пугающий. Среди прочего:
SYSTEM TOOLS RETRIEVE RUNNING APPS Allows the app to retrieve information about currently and recently running tasks. Malicious apps may discover private information about other apps.
CHANGE/INTERCEPT NETWORK SETTINGS AND TRAFFIC Allows the app to change network settings and to intercept and inspect all network traffic, for example to change the proxy and port of any APN. Malicious apps may monitor, redirect, or modify network packets without your knowledge.
PREVENT TABLET FROM SLEEPING PREVENT PHONE FROM SLEEPING Allows the app to prevent the tablet from going to sleep. Allows the app to prevent the phone from going to sleep.
CHANGE YOUR UI SETTINGS Allows the app to change the current configuration, such as the locale or overall font size. MODIFY GLOBAL SYSTEM SETTINGS Allows the app to modify the system's settings data. Malicious apps may corrupt your system's configuration.
DISPLAY SYSTEM-LEVEL ,ALERTS Allows the app to show system alert windows. Malicious apps may take over the entire screen.
MOUNT AND UNMOUNT FILESYSTEMS Allows the app to mount and unmount filesystems for removable storage.
CHANGE NETWORK CONNECTIVITY Allows the app to change the state of network connectivity.
CHANGE WI-FI STATE Allows the app to connect to and disconnect from Wi-Fi access points, and to make changes to configured Wi-Fi networks.
-- Обновить --
Я также обнаружил, что диспетчер пакетов Android в значительной степени просто удаляет пакет, если его об этом просят.only прежде чем сделать это, проверьте, зарегистрирован ли удаляемый пакет как имеющий активного администратора устройства:
try {
if (dpm != null && dpm.packageHasActiveAdmins(packageName)) {
Slog.w(TAG, "Not removing package " + packageName + ": has active device admin");
return PackageManager.DELETE_FAILED_DEVICE_POLICY_MANAGER;
}
} catch (RemoteException e) {
}
См. Строку 6900 в PackageManagerService в источнике AOSP.Вот.
Для этого приложение должно быть явно зарегистрировано пользователем как администратор устройства. Смотрите примечания по администрированию устройства здесь:http://developer.android.com/training/enterprise/device-management-policy.html.