如何检查 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.android
boolean 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

如何检查用户是不是已经喜欢 Facebook 页面?

Facebook如何检查用户是不是喜欢页面并显示内容?

如何检查请求是不是来自 google、facebook、twitter 和 bing 爬虫? [复制]

确定是不是从 Unity 安装 Facebook 应用