J'essaye d'installer des applications depuis Google Play. Je peux comprendre qu'en ouvrant l'URL de la boutique Google Play, cela ouvre Google Play et lorsque j'appuie sur le bouton de retour, l'activité reprend.
Intent marketIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(appURL));
marketIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
startActivity(marketIntent);
Quand je suis retourné à l'activité, j'ai essayé d'appeler ceci onResume()
pour vérifier si l'application est installée, mais je reçois une erreur:
@Override
protected void onResume() {
super.onResume();
boolean installed = false;
while (!installed) {
installed = appInstalledOrNot(APPPACKAGE);
if (installed) {
Toast.makeText(this, "App installed", Toast.LENGTH_SHORT).show();
}
}
}
private boolean appInstalledOrNot(String uri) {
PackageManager pm = getPackageManager();
boolean app_installed = false;
try {
pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
app_installed = true;
}
catch (PackageManager.NameNotFoundException e) {
app_installed = false;
}
return app_installed ;
}
L'erreur est la suivante:
E / AndroidRuntime (796): java.lang.RuntimeException: Impossible de démarrer l'activité ComponentInfo {com.example.appinstaller / com.example.appinstaller.MainActivity}: android.content.ActivityNotFoundException: Aucune activité trouvée pour gérer l'intention {act = android .intent.action.VIEW dat = market: // détails? id = com.package.name flg = 0x40080000}
Je suppose que l'activité est onPause()
. Y a-t-il une meilleure façon de le mettre en œuvre? J'essaie de vérifier si l'application a terminé l'installation.
la source
Réponses:
Essaye ça:
Il tente de récupérer des informations sur le paquet dont vous avez transmis le nom. À défaut, si un a
NameNotFoundException
été lancé, cela signifie qu'aucun paquet avec ce nom n'est installé, nous retournons doncfalse
.Notez que nous passons dans a
PackageManager
au lieu de aContext
, de sorte que la méthode soit légèrement plus flexible et ne viole pas la loi de Demeter . Vous pouvez utiliser la méthode sans accéder à uneContext
instance, tant que vous en avez unePackageManager
.Utilisez-le comme ceci:
la source
La réponse de Robin Kanters est juste, mais elle vérifie les applications installées quel que soit leur état activé ou désactivé.
Nous savons tous qu'une application peut être installée mais désactivée par l'utilisateur, donc inutilisable.
Cela vérifie les applications installées ET activées:
Vous pouvez mettre cette méthode dans une classe comme
Utils
et l'appeler partout en utilisant:la source
Essaye ça:
la source
Solution plus rapide:
getPackageGids
est moins chergetPackageInfo
, donc ça marche plus vite.Remarque: cela ne fonctionnera pas dans certains espaces virtuels. Ils peuvent violer l'API Android et toujours renvoyer un tableau, même s'il n'y a pas d'application avec ce nom de package.
Dans ce cas, utilisez
getPackageInfo
.la source
la source
// méthode pour vérifier le package installé true / false
la source
Si vous voulez l'essayer sans le bloc try catch, vous pouvez utiliser la méthode suivante, créer un intent et définir le package de l'application que vous souhaitez vérifier
et appelez la méthode suivante pour vérifier si l'application est installée
la source
Ceux qui recherchent une solution Kotlin peuvent utiliser cette méthode,
Ici, j'ai partagé le code complet et j'ai également géré le statut activé. Vérifiez si l'application est installée dans Android Kotlin
la source
la source