如何检查 Facebook 是不是安装了 Android
Posted
技术标签:
【中文标题】如何检查 Facebook 是不是安装了 Android【英文标题】:How to check if Facebook is installed Android如何检查 Facebook 是否安装了 Android 【发布时间】:2011-10-06 09:06:52 【问题描述】:我正在修改我的应用程序,以便能够在用户尝试在未安装 facebook 应用程序的情况下发布(SSO 所需)时进行捕捉。这是我正在使用的代码:
try
ApplicationInfo info = getPackageManager().
getApplicationInfo("com.facebook.android", 0 );
return true;
catch( PackageManager.NameNotFoundException e )
return false;
问题是,它总是在捕捉错误。根据问题here,我需要申请相应的权限,但不知道需要申请什么权限。
我的问题是权限问题还是其他问题?
【问题讨论】:
【参考方案1】:com.facebook.android
是 Facebook SDK 的包名。 Facebook 应用程序包是com.facebook.katana
。
【讨论】:
如果您有兴趣以方便的方式检查设备上其他应用程序的包名称,我发现此应用程序很有帮助:play.google.com/store/apps/…【参考方案2】:要检查应用程序是否安装在 Android 上,请使用以下方法:
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;
在您的情况下,请使用以下任何一个包:
com.facebook.orca com.facebook.katana com.example.facebook com.facebook.androidboolean hasPackage = isPackageInstalled(MainActivity.this, "com.facebook.katana");
对于科特林
fun isPackageInstalled(packageName: String, context: Context): Boolean
return try
val packageManager = context.packageManager
packageManager.getPackageInfo(packageName, 0)
true
catch (e: PackageManager.NameNotFoundException)
false
【讨论】:
【参考方案3】: 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;
【讨论】:
【参考方案4】:在 Utilities 或任何适合您的地方编写函数。这将帮助您检查是否安装了任何应用程序。让我自己说它在 Utilities.java 中
public static boolean isAppInstalled(Context context, String packageName)
try
context.getPackageManager().getApplicationInfo(packageName, 0);
return true;
catch (PackageManager.NameNotFoundException e)
return false;
然后,从任何地方调用这个函数。例如检查 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);
享受
【讨论】:
【参考方案5】:最好的方法是选择包含 com.facebook 的包名,但无论如何你可以使用以下包:
com.facebook.orca com.facebook.katana com.example.facebook com.facebook.android【讨论】:
【参考方案6】:您可以检查是否安装了任何 Facebook 应用程序的所有 Facebook 应用程序。
为了支持 OS 级别 11,我们需要在 AndrodiManifest.xml
中添加它以避免找不到包名异常 -
<manifest ...
<queries>
<package android:name="com.facebook.katana" />
<package android:name="com.facebook.lite" />
<package android:name="com.facebook.android" />
<package android:name="com.example.facebook" />
</queries>
<application .....
然后将此方法添加到您的代码中-
public static String isFacebookAppInstalled(Context context)
if(context!=null)
PackageManager pm=context.getPackageManager();
ApplicationInfo applicationInfo;
//First check that if the main app of facebook is installed or not
try
applicationInfo = pm.getApplicationInfo("com.facebook.katana", 0);
return applicationInfo.enabled?"com.facebook.katana":"";
catch (Exception ignored)
//Then check that if the facebook lite is installed or not
try
applicationInfo = pm.getApplicationInfo("com.facebook.lite", 0);
return applicationInfo.enabled?"com.facebook.lite":"";
catch (Exception ignored)
//Then check the other facebook app using different package name is installed or not
try
applicationInfo = pm.getApplicationInfo("com.facebook.android", 0);
return applicationInfo.enabled?"com.facebook.android":"";
catch (Exception ignored)
try
applicationInfo = pm.getApplicationInfo("com.example.facebook", 0);
return applicationInfo.enabled?"com.example.facebook":"";
catch (Exception ignored)
return "";
然后启动应用程序 -
if (!TextUtils.isEmpty(isFacebookAppInstalled(context)))
/* Facebook App is installed,So launch it.
It will return you installed facebook app's package
name which will be useful to launch the app */
Uri uri = Uri.parse("fb://facewebmodal/f?href=" + yourURL);
Intent intent = context.getPackageManager().getLaunchIntentForPackage(isFacebookAppInstalled(context);
if (intent != null)
intent.setAction(Intent.ACTION_VIEW);
intent.setData(uri);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
else
Intent intentForOtherApp = new Intent(Intent.ACTION_VIEW, uri);
context.startActivity(intentForOtherApp);
【讨论】:
【参考方案7】: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);
这段代码对我有用
【讨论】:
回答与问题无关。他在问别的问题。 请在回答问题前仔细阅读。干杯【参考方案8】: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;
【讨论】:
发布没有格式或解释的代码有点糟糕!【参考方案9】:myWebView.setWebViewClient(new WebViewClient()
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
Log.e("tag","url override url = "+ url);
if( url.startsWith("http:") || url.startsWith("https:") )
return false;
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity( intent );
return true;
);
【讨论】:
以上是关于如何检查 Facebook 是不是安装了 Android的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Firebase Auth 中检查用户是不是通过 Facebook 登录 [重复]
如何使用 Facebook 的 API 检查用户是不是喜欢我的 Facebook 页面或 URL