Android:检查Facebook应用程序是否存在于用户的设备上

时间:2012-12-27 08:32:52

标签: android android-intent

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

fb://pages/PAGE_ID

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

因为在这种情况下你会得到一个浏览器列表来打开网址而不是teh facebook app。

如果用户安装了facebook应用程序,则此功能正常。但是,如果用户没有Facebook应用程序,它会崩溃。

有没有办法检查用户是否有Facebook应用程序?

3 个答案:

答案 0 :(得分:5)

您是否已检查this? 您可以随时检查是否安装了应用this

答案 1 :(得分:1)

在原生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);
    }
}

答案 2 :(得分:1)

我认为您可以重复使用我编写的代码来检查设备上是否安装了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;
    }