14

只是想分享一个动态文本字符串 + 应用程序的 URL。原生 Android 共享意图设置正确,并且与 Twitter、Gmail 等完美配合。但是,正如许多人猜测的那样,它不适用于 Facebook。显然是因为 Facebook 不接受该intent.EXTRA_TEXT字段中的文本,只接受一个 URL。

好吧,我对你们所有人的问题是:有没有办法根据他们选择共享的方法来分支共享意图附加内容?例如,如果他们通过 gmail 或 Twitter 分享,请使用现有的String + URL(所需选项)EXTRA_TEXT,但如果他们选择通过 Facebook 分享,则仅使用 URL 作为EXTRA_TEXT.

并不是真的想为这样一个内置在 Android 中的简单任务实现 Facebook Android SDK。

感谢您的时间和建议。

尝试过这样的事情,但它显然失败了,因为它只检查共享选项是否存在(当共享弹出时,而不是在他们单击共享方法之后),当他们选择一种方法时它没有响应。

  String shareBody = "app string text " + act_txt + " more text! Get the app at http://www.appurl.com";

 PackageManager pm = view.getContext().getPackageManager();
    List<ResolveInfo> activityList = pm.queryIntentActivities(sharingIntent, 0);
    for(final ResolveInfo app : activityList) {
         Log.i(TAG, "app.actinfo.name: " + app.activityInfo.name);
        //if((app.activityInfo.name).contains("facebook")) {
              if("com.facebook.katana.ShareLinkActivity".equals(app.activityInfo.name)) {


            sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, "http://www.appurl.com");
            startActivity(Intent.createChooser(sharingIntent, "Share idea"));
            break;
        } else {
            sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "app name");
            sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
            startActivity(Intent.createChooser(sharingIntent, "Share"));
            break;
        }
    }
4

1 回答 1

20

找到了一个解决方案,在这个 SO 问题上要求别的东西:https ://stackoverflow.com/a/8550043/1938669

尝试在这里发布我的原始问题很接近。在可能的 shareIntent 列表的循环中,您需要针对特定​​的共享选择(如 facebook 或 twitter)创建一个新的共享意图

这是一个最终的工作解决方案,如果选择了 facebook,则仅共享一个 URL,否则共享完整的文本字符串 + url:

public void shareIt(View view){
    //sharing implementation
    List<Intent> targetedShareIntents = new ArrayList<Intent>();
    Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
    sharingIntent.setType("text/plain");
    String shareBody = "string of text " + txt_var + " more text! Get the app at http://someapp.com";

    PackageManager pm = view.getContext().getPackageManager();
    List<ResolveInfo> activityList = pm.queryIntentActivities(sharingIntent, 0);
    for(final ResolveInfo app : activityList) {

         String packageName = app.activityInfo.packageName;
         Intent targetedShareIntent = new Intent(android.content.Intent.ACTION_SEND);
         targetedShareIntent.setType("text/plain");
         targetedShareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "share");
         if(TextUtils.equals(packageName, "com.facebook.katana")){
             targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "http://someurl.com");
         } else {
             targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
         }

         targetedShareIntent.setPackage(packageName);
         targetedShareIntents.add(targetedShareIntent);

    }

    Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Share Idea");

    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{}));
    startActivity(chooserIntent);

}
于 2013-01-25T00:56:14.587 回答