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 に答える