【问题标题】:Android: Check to see if Facebook app is present on user's deviceAndroid:检查用户设备上是否存在 Facebook 应用
【发布时间】:2012-12-12 15:58:14
【问题描述】:

我保留了一个按钮,可将用户带到我的 Facebook 页面。 为了打开官方 facebook 应用程序,我使用以下网址:

fb://pages/PAGE_ID

而不是http://facebook.com/PAGE_ID

因为在这种情况下,您会得到一个浏览器列表来打开 URL,而不是 facebook 应用程序。

如果用户安装了 facebook 应用程序,它就可以工作。但是,如果用户没有 facebook 应用程序,它会崩溃。

有什么方法可以检查用户是否有 facebook 应用程序?

【问题讨论】:

  • 捕获fb:// 异常然后尝试http:// URL 怎么样?

标签: android android-intent


【解决方案1】:

您是否已经检查过this? 您可以随时检查是否安装了类似this 的应用。

【讨论】:

    【解决方案2】:

    在原生 android 应用中,这很容易实现:

    Uri dataUri = Uri.parse("fb://....");
    Intent receiverIntent = new Intent(Intent.ACTION_VIEW, dataUri);
    
    PackageManager packageManager = getPackageManager();
    List<ResolveInfo> activities = packageManager.queryIntentActivities(receiverIntent, 0);
    
    if (activities.size() > 0) {
        startActivity(receiverIntent);
    } else {
        Uri webpage = Uri.parse("http://www.facebook.com/...");
        Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);
    
        packageManager = getPackageManager();
        activities = packageManager.queryIntentActivities(webIntent, 0);
    
        if (activities.size() > 0) {
            startActivity(webIntent);
        }
    }
    

    【讨论】:

      【解决方案3】:

      我认为您可以重复使用我编写的这段代码来检查设备上是否安装了 twitter 应用程序,以检查是否安装了 facebook 应用程序。对于 twitterApps 列表,您必须将值替换为“com.facebook.katana”。

          public Intent findTwitterClient() {
                  final String[] twitterApps = { "com.twitter.android", "com.handmark.tweetcaster", "com.seesmic", "com.thedeck.android", "com.levelup.touiteur", "com.thedeck.android.app" };
      
                  Intent tweetIntent = new Intent(Intent.ACTION_SEND);
                  tweetIntent.putExtra(Intent.EXTRA_TEXT, "#hashtagTest");
                  tweetIntent.setType("text/plain");
                  final PackageManager packageManager = getPackageManager();
                  List<ResolveInfo> list = packageManager.queryIntentActivities(tweetIntent, PackageManager.MATCH_DEFAULT_ONLY);
      
                  for (int i = 0; i < twitterApps.length; i++) {
                          for (ResolveInfo resolveInfo : list) {
                                  String p = resolveInfo.activityInfo.packageName;
                                  if (p != null && p.startsWith(twitterApps[i])) {
                                          tweetIntent.setPackage(p);
                                          return tweetIntent;
                                  }
                          }
                  }
                  return null;
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-11
        • 2015-03-12
        • 2014-06-08
        • 1970-01-01
        • 2016-07-06
        • 1970-01-01
        • 2012-09-06
        • 2017-01-10
        相关资源
        最近更新 更多