¿Cómo detectar si la Google Play Store está descargando / instalando una aplicación específica?

Muchas aplicaciones proporcionan recomendaciones para instalar otras aplicaciones hechas por el desarrollador o los socios del desarrollador. Las recomendaciones son solo enlaces a Play Store desde donde se puede instalar la aplicación recomendada.

No quiero proporcionar una recomendación para la aplicación X si:

  • La aplicación X ya está instalada
  • App X está en proceso de instalación (por ejemplo, descargar en Google Play)

Detectar si X está instalado es fácil, pero no puedo encontrar ninguna API para leer el estado de descarga / instalación desde Google Play. ¿Hay alguna manera de detectar si el usuario está en proceso de instalar la aplicación X?

¿Hay alguna manera de detectar si el usuario está en proceso de instalar la aplicación X?

Lo más cercano que obtendrá es usar NotificationListenerService .

De los documentos:

Servicio que recibe llamadas del sistema cuando se publican o eliminan nuevas notificaciones.

Sin embargo, teniendo en cuenta que este Service se agregó recientemente en el nivel 18 de API y en su caso de uso, podría considerar utilizar BroadcastReceiver y escuchar cuando se llaman android.intent.action.PACKAGE_ADDED y android.intent.action.PACKAGE_REMOVED . De esta manera, una vez que una aplicación se instala o se elimina, puede hacer lo que quiera con el nombre del paquete, como proporcionar un enlace a Play Store.

He aquí un ejemplo:

Receptor de radiodifusión

 public class PackageChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent == null || intent.getData() == null) { return; } final String packageName = intent.getData().getSchemeSpecificPart(); // Do something with the package name } } 

En tu AndroidManifest

 <receiver android:name="your_path_to.PackageChangeReceiver" > <intent-filter> <action android:name="android.intent.action.PACKAGE_ADDED" /> <action android:name="android.intent.action.PACKAGE_REMOVED" /> <data android:scheme="package" /> </intent-filter> </receiver> 

Soy consciente de una manera de hacerlo. Sin embargo, requerirá que inicie la descarga desde una URL.

La simple idea detrás es usar

 getContentLength() 

Para ver la longitud del contenido de la aplicación en bytes.

Entonces, simplemente puede usar

 YouInputStream.read(TheData) 

Para ver el progreso de la descarga.

En realidad, hay una respuesta mucho más detallada sobre cómo hacer esto en Descargar un archivo con Android y mostrar el progreso en un ProgressDialog

En esa nota, tal vez usted puede obtener acceso al socket en el que se descarga la aplicación y luego seguir los mismos pasos de arriba. No tengo ninguna experiencia con este tho.

  • GamesClient no se conecta. Error: "Llamar a connect () y esperar a que onConnected () sea llamado."
  • Android AppStateManager :: Fuga interna de datos dentro de un objeto DataBuffer detectado
  • Servicios de Google Play con AdMob. ¿Comprobar disponibilidad?
  • Uso del nuevo ID de Anunciante de Android en un SDK
  • ¿Cómo puedo obligar a GoogleApiClient a activar la IU del selector de cuentas cada vez que llamo a conectar?
  • Android Studio no puede resolver el símbolo GoogleAnalytics v4
  • Cómo ejecutar la versión de la aplicación de depuración en una base de datos de depuración de 'FireBase'
  • Google Play Service da Advertencia cada vez para la versión
  • Android Studio Biblioteca de Google Play-Services
  • APIs faltantes y autenticación> Aplicaciones registradas en Google Cloud Console / ¿Cómo obtengo la clave API de GCM?
  • Android Google plus Sign out button se ve diferente del botón de inicio de sesión en Google tutorial docs
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.