Android 和 Facebook 共享 Intent

标签 android facebook android-intent

我正在开发一款 Android 应用,并且很想知道如何使用 Android 的分享 Intent 在应用内更新应用用户的状态。

查看了 Facebook 的 SDK,这似乎很容易做到,但是我希望允许用户通过常规的共享 Intent 弹出窗口来做到这一点?在这里看到:

pop up

我已经尝试了通常的分享 Intent 代码,但这似乎不再适用于 Facebook。

public void invokeShare(Activity activity, String quote, String credit) {
    Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
    shareIntent.setType("text/plain");
    shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, activity.getString(R.string.share_subject));
    shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Example text");    

    activity.startActivity(Intent.createChooser(shareIntent, activity.getString(R.string.share_title)));
}

更新: 进行了更多挖掘后,它看起来好像是 Facebook 应用程序的一个尚未解决的错误! (facebook bug) 与此同时,我似乎只能忍受负面的“分享不起作用!!!”评论。干杯 Facebook :*(

最佳答案

显然 Facebook 不再(截至 2014 年)允许您自定义共享屏幕,无论您是否只是打开 sharer.php URL或以更专业的方式使用 Android Intent。例如,请参阅以下答案:

无论如何,使用普通 Intent,可以仍然共享一个 URL,但不能共享任何默认文本,如 billynomates commented . (此外,如果您没有要分享的 URL,只需使用空白的“Write Post”(即状态更新)对话框启动 Facebook 应用程序同样容易;使用下面的代码,但省略 EXTRA_TEXT。)

这是我发现涉及使用任何 Facebook SDK 的最佳解决方案。

如果已安装,此代码直接打开官方 Facebook 应用,否则返回在浏览器中打开 sharer.php。 (这个问题中的大多数其他解决方案都会提出 a huge "Complete action using…" dialog 这根本不是最优的!)

String urlToShare = "https://stackoverflow.com/questions/7545254";
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
// intent.putExtra(Intent.EXTRA_SUBJECT, "Foo bar"); // NB: has no effect!
intent.putExtra(Intent.EXTRA_TEXT, urlToShare);

// See if official Facebook app is found
boolean facebookAppFound = false;
List<ResolveInfo> matches = getPackageManager().queryIntentActivities(intent, 0);
for (ResolveInfo info : matches) {
    if (info.activityInfo.packageName.toLowerCase().startsWith("com.facebook.katana")) {
        intent.setPackage(info.activityInfo.packageName);
        facebookAppFound = true;
        break;
    }
}

// As fallback, launch sharer.php in a browser
if (!facebookAppFound) {
    String sharerUrl = "https://www.facebook.com/sharer/sharer.php?u=" + urlToShare;
    intent = new Intent(Intent.ACTION_VIEW, Uri.parse(sharerUrl));
}

startActivity(intent);

(关于 com.facebook.katana 包名,请参见 MatheusJardimB's comment。)

在我安装了 Facebook 应用的 Nexus 7 (Android 4.4) 上的结果如下所示:

enter image description here

关于Android 和 Facebook 共享 Intent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7545254/

相关文章:

java - CONNECTED_STRIPE_ACCOUNT_ID 是什么?如何从android平台获取它?

java - Proguard 警告 : can't find referenced class scala. *

Android listView 显示除最后一项以外的所有项目

ios - Facebook 文本共享不适用于 UIActivityViewController

Android Studio 更新 - 无法解析 com.android.databinding

android - 来自通知的 Intent 没有额外内容

android - Linux Mint 17.1 上的 ADB 无法识别使用 Android Kitkat 4.4.2 的 Zenfone 5

css - Facebook Like 按钮弹出位置

Android - 在安装和启动时将数据从链接传递到应用程序

android - 如何在使用 Intent 时为android中的布局添加过渡效果