Je modifie mon application pour pouvoir intercepter si un utilisateur tente de publier sans que l'application facebook soit installée (requis pour SSO). Voici le code que j'utilise:
try{
ApplicationInfo info = getPackageManager().
getApplicationInfo("com.facebook.Android", 0 );
return true;
} catch( PackageManager.NameNotFoundException e ){
return false;
}
Le problème, c'est qu'il attrape toujours une erreur. Selon la question ici , je dois demander l’autorisation appropriée, mais je ne sais pas quelles autorisations je dois demander.
Est-ce que mon problème est une permission ou autre chose?
com.facebook.Android
est le nom du package pour le SDK de Facebook. Le package de l'application Facebook est com.facebook.katana
.
Pour vérifier si une application est installée sur Android, utilisez cette méthode:
public static boolean isPackageInstalled(Context c, String targetPackage) {
PackageManager pm = c.getPackageManager();
try {
PackageInfo info = pm.getPackageInfo(targetPackage, PackageManager.GET_META_DATA);
} catch (NameNotFoundException e) {
return false;
}
return true;
}
Dans votre cas, utilisez l'un de ces packages:
boolean hasPackage = isPackageInstalled(MainActivity.this, "com.facebook.katana");
if (isAppInstalled()) {
Toast.makeText(getApplicationContext(), "facebook app already installed", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "facebook app not installing", Toast.LENGTH_SHORT).show();
}
public boolean isAppInstalled() {
try {
getApplicationContext().getPackageManager().getApplicationInfo("com.facebook.katana", 0);
return true;
} catch (PackageManager.NameNotFoundException e) {
return false;
}
}
Écrivez la fonction dans Utilitaires ou n'importe où pour vous.Cela fonctionnera pour vous permettre de vérifier si une application est installée ou non.laissez-moi dire qu'elle est dans Utilities.Java
public static boolean isAppInstalled(Context context, String packageName) {
try {
context.getPackageManager().getApplicationInfo(packageName, 0);
return true;
} catch (PackageManager.NameNotFoundException e) {
return false;
}
}
Ensuite, appelez cette fonction de n’importe où. par exemple pour vérifier l'application facebook
if(Utilities.isAppInstalled(getApplicationContext(), "com.facebook.katana")) {
// Do something
}else {
Intent i = new Intent(Android.content.Intent.ACTION_VIEW);
i.setData(Uri.parse("https://play.google.com/store/apps/details?id=com.facebook.katana"));
startActivity(i);
}
Prendre plaisir
La meilleure approche consiste à choisir le nom du paquet, y compris com.facebook, mais vous pouvez quand même utiliser les paquets suivants:
Intent i = new Intent(Android.content.Intent.ACTION_VIEW);
i.setData(Uri.parse("https://play.google.com/store/apps/details?id=com.facebook.katana"));
startActivity(i);
ce code a fonctionné pour moi