recuperar llamadas juegos fabrica eliminadas desinstalados desinstaladas como celular borre borrados borradas apps aplicaciones aplicacion android android-intent intentfilter

android - llamadas - como recuperar juegos borrados del celular



¿Cómo saber que una aplicación va a ser desinstalada en Android? (6)

En cambio, conviértalo en un administrador de dispositivos. Eso bloqueará automáticamente al usuario de desinstalarlo. Si el usuario intenta desactivarlo desde la lista Seguridad> Administrador de dispositivo para desinstalarlo, su aplicación puede solicitar la contraseña.

Quiero implementar algo como lo está haciendo la aplicación AppLock.
Si en su configuración está configurado para bloquear la desinstalación / instalación de aplicaciones, entonces al desinstalar cualquier aplicación (precisamente al hacer clic en el botón Desinstalar ) aparece una pantalla de bloqueo que solicita una contraseña / patrón.
Solo después de ingresar la contraseña, el usuario puede desinstalar la aplicación.

¿Cuál es esa intención (o algo así, supongo que es una intención pero no estoy seguro) que se obtiene cuando se hace clic en el botón Desinstalar ?

Además , no quiero convertirlo en administrador del dispositivo, ya que la aplicación que mencioné requiere ser administrador del dispositivo.
Si pueden hacerlo, entonces hay alguna manera. Por favor ayuda.


Puede interceptar la intención de la desinstalación de su aplicación. Simplemente ponga el siguiente código en su archivo de manifiesto:

<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>

Después de esto, puede procesar de alguna manera que su aplicación va a ser eliminada, y llame al desinstalador del administrador de paquetes.



intente captar por debajo de la intención en el receptor de difusión y active su actividad de advertencia de actividad o procese lo que desee continuar.

"android.intent.action.UNINSTALL_PACKAGE"

este intento no será entregado o transmitido a la misma aplicación que está a punto de ser desinstalado


He encontrado una manera.

  1. Cuando vaya a Configuración -> Administrar aplicaciones -> Haga clic en cualquier aplicación .
    recibes una transmisión con el nombre del paquete en extras.

  2. Cuando hace clic en el botón Desinstalar en esa pantalla, se abre una actividad siempre nombre com.android.uninstaller.UnistallerActivity .

Entonces, la solución a este problema es una forma combinada de 1 y 2 pasos mencionados anteriormente.

Cuando tengas la intención mencionada en el primer paso y los extras contengan el nombre del paquete de tu aplicación, inicia un vigilante de actividad usando PackageManager por el cual obtienes la actividad más visible y su paquete.
Entonces, si se inicia la actividad de desinstalación, entonces puede estar seguro de que el usuario quiere desinstalar su aplicación.

Ahí después puedes hacer las acciones necesarias para evitar que haga eso.


prueba este código

Intente obtener la actividad principal en la tarea mediante ActivityManager y compruebe si se trata de la actividad de desinstalación.

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 }