Как узнать, что приложение будет удалено в Android?

Я хочу реализовать что-то вроде приложения AppLock.
Если в его настройках настроено блокирование удаления / установки приложений, то при удалении любого приложения (именно при нажатии кнопки " Удалить") появляется экран блокировки, запрашивающий пароль / шаблон.
Только после ввода пароля пользователь может удалить приложение.

Что это за намерение (или что-то еще, я предполагаю, что это намерение, но не уверен), что получаешь при нажатии кнопки "Удалить"?

Кроме того, я не хочу назначать его администратором устройства, так как приложение, которое я упомянул, обязательно должно быть администратором устройства.
Если они могут это сделать, то есть какой-то способ. Пожалуйста помоги.

6 ответов

Я нашел способ.

  1. Когда вы идете в Настройки -> Управление приложениями -> Нажмите на любое приложение.
    Вы получаете трансляцию с названием пакета в дополнениях.

  2. Когда вы нажимаете на кнопку Удалить на этом экране, деятельность открывается всегда имя com.android.uninstaller.UnistallerActivity,

Таким образом, решение этой проблемы представляет собой комбинированный способ из 1 и 2 шагов, упомянутых выше.

Когда когда-либо вы получаете намерение, упомянутое на первом шаге, и дополнения содержат имя пакета вашего приложения, запускайте наблюдатель активности, используя PackageManager с помощью которого вы получаете наиболее заметную деятельность и ее пакет.
Так что теперь, если запущен процесс удаления, вы можете быть уверены, что пользователь хочет удалить ваше приложение.

Там после вы можете сделать необходимые действия, чтобы остановить его, чтобы сделать это.

Попробуйте поймать ниже намерения в широковещательном приемнике и запустите предупреждение о вашей активности или обработайте то, что вы хотите продолжить.

"Android.intent.action.UNINSTALL_PACKAGE"

это намерение не будет передано или передано в то же приложение, которое собирается удалить

Попробуй этот код

Пожалуйста, попробуйте получить верхнюю активность в задаче через ActivityManager, и проверьте, является ли это действием удаления.

 ComponentName topActivity = mActivityManager.getRunningTasks(1).get(0).topActivity;
String packageName = topActivity.getPackageName();
String className = topActivity.getClassName();
Log.v(TAG, "packageName" + packageName);
Log.v(TAG, "className" + className);

if ("com.android.packageinstaller".equals(packageName)
    && "com.android.packageinstaller.UninstallerActivity".equals(className)) {
//Do anything you want here
}

Похоже, это претерпело множество изменений. Трансляция по умолчанию PACKAGE_REMOVED не работает как задумано. Я сталкивался с этим обсуждением, на самом деле не реализовал его, но люди говорят, что это сработало для них. Дай попробовать

https://groups.google.com/forum/?fromgroups=

Вместо этого сделайте его администратором устройства. Это автоматически заблокирует пользователя от его удаления. Если пользователь пытается деактивировать его из списка Security > Device Administrator, чтобы удалить его, приложение может запросить пароль.

Вы можете перехватить намерение удаления приложения. Просто поместите следующий код в файл манифеста:

<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.DELETE_PACKAGES" />
<uses-permission android:name="android.permission.CLEAR_APP_CACHE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name=".UninstallActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <action android:name="android.intent.action.DELETE" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="package" android:pathPattern="com.package.yourapp" />
        </intent-filter>            
    </activity>
</application>

После этого вы можете как-то обработать, что ваше приложение будет удалено, и вызвать деинсталлятор диспетчера пакетов.

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