Включение дополнительных возможностей Android Share Intent в зависимости от того, какой метод они предпочитают использовать

Просто хочу поделиться динамической текстовой строкой + URL-адресом приложения. Собственное намерение использовать Android настроено правильно и отлично работает с Twitter, Gmail и т.д. Но, как многие догадываются, это не работает с Facebook. Явно, потому что Facebook не принимает текст в поле intent.EXTRA_TEXT, только один URL.

Ну, мой вопрос к y'all: есть ли способ отделить дополнительные намерения долевого участия в зависимости от того, какой метод они предпочитают использовать? например, если они делятся через gmail или Twitter, используйте существующий String + URL (желаемый вариант) EXTRA_TEXT, но если они решили делиться через Facebook, используйте только URL как EXTRA_TEXT.

Не очень хочется реализовать Android Android SDK для такой простой задачи, которая встроена в Android.

Цените свое время и советы.

Пробовал что-то вроде этого, но он, очевидно, терпит неудачу, потому что он проверяет, существует ли опция совместного доступа (когда общий доступ всплывает, а не после нажатия на метод общего доступа), он не отвечает, когда выбирает метод.

  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;
        }
    }

Ответ 1

нашел решение на этом SO-вопросе, требуя чего-то еще: fooobar.com/info/17965/...

попытка опубликовала мой оригинальный вопрос здесь была близка. в этом цикле возможного списка ShareIntent вам необходимо создать новое намерение для общего доступа, предназначенное для конкретного выбора совместного доступа (например, facebook или twitter).

вот окончательное рабочее решение, которое использует только URL-адрес, если выбрана функция facebook, в противном случае разделяет полную текстовую строку + 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);

}