Поделиться изображением и текстом через Whatsapp или Facebook

17

В моем приложении есть кнопка совместного доступа, и я хочу совместно использовать изображение и текст одновременно. В GMail он отлично работает, но в WhatsApp отправляется только изображение, а в Facebook приложение вылетает.

Код, который я использую для совместного использования, таков:

Intent shareIntent = new Intent(Intent.ACTION_SEND);  
shareIntent.setType("image/*");
shareIntent.putExtra(Intent.EXTRA_TEXT, "Message");         

Uri uri = Uri.parse("android.resource://" + getPackageName() + "/drawable/ford_focus_2014");
     try {
        InputStream stream = getContentResolver().openInputStream(uri);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

shareIntent.putExtra(Intent.EXTRA_STREAM, uri);

Если я использую «shareIntent.setType» («* / *»), происходит сбой Facebook и WhatsApp.

Есть ли способ сделать это? Может быть отправлено два сообщения отдельно (WhatsApp).

Спасибо заранее.

    
задан user2802764 15.04.2014 в 09:36
источник
  • возможный дубликат Android Как отправить текст и изображения или любой объект с помощью намерения? –  Shabbir Dhangot 02.10.2014 в 07:29
  • В этой ссылке есть много примеров об этом github.com/codepath/android_guides/wiki/... –  Charleston 21.10.2016 в 04:59

7 ответов

15

Это невозможно, так как WhatsApp не поддерживает сообщения с обоими изображениями и текстом в них. Сообщение может состоять из одного изображения, текстовой последовательности, аудиофайла, контакта или видео. Вы не можете иметь комбинацию из них.

Скорее вы можете поделиться своим текстом, используя

    Intent whatsappIntent = new Intent(Intent.ACTION_SEND);
    whatsappIntent.setType("text/plain");
    whatsappIntent.setPackage("com.whatsapp");
    whatsappIntent.putExtra(Intent.EXTRA_TEXT, "The text you wanted to share");
    try {
        activity.startActivity(whatsappIntent);
    } catch (android.content.ActivityNotFoundException ex) {
        ToastHelper.MakeShortText("Whatsapp have not been installed.");
    }
    
ответ дан Shani Goriwal 15.04.2014 в 09:48
  • Спасибо, я пошлю фотографию только тогда :( –  user2802764 15.04.2014 в 10:04
  • С удовольствием .... @ user2802764 –  Shani Goriwal 15.04.2014 в 10:05
  • Проверьте приведенный ниже ответ, он делает возможным обмен. –  Darpan 30.05.2015 в 01:58
  • @ShaniGoriwal У меня есть собственный список приложений, в которых мы можем обмениваться данными, но как я могу обмениваться данными с помощью getLaunchIntentForPackage (String pckg)? –  Devendra Singh 10.08.2015 в 14:38
  • Может быть отправлено через прохождение Intent.EXTRA_STREAM, imageUri –  Prasanna Anbu 23.11.2015 в 12:15
Показать остальные комментарии
27

В настоящее время Whatsapp поддерживает совместное использование изображений и текста. (Ноябрь 2014 г.).

Вот пример того, как это сделать:

    /**
     * Show share dialog BOTH image and text
     */
    Uri imageUri = Uri.parse(pictureFile.getAbsolutePath());
    Intent shareIntent = new Intent();
    shareIntent.setAction(Intent.ACTION_SEND);
    //Target whatsapp:
    shareIntent.setPackage("com.whatsapp");
    //Add text and then Image URI
    shareIntent.putExtra(Intent.EXTRA_TEXT, picture_text);
    shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
    shareIntent.setType("image/jpeg");
    shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

    try {
        startActivity(shareIntent);
    } catch (android.content.ActivityNotFoundException ex) {
        ToastHelper.MakeShortText("Whatsapp have not been installed.");
    }
    
ответ дан Display name 06.11.2014 в 13:52
  • Есть ли кто-нибудь попробовать? –  Erhan H. 04.11.2015 в 10:28
  • Просто попробовал. Больше не работает). –  Lord Flash 24.02.2016 в 16:02
  • работает как шарм .. :) спасибо –  Muhammad Sufiyan 31.03.2016 в 23:16
  • Works :) Спасибо –  roeiba 27.04.2016 в 15:57
  • и для видео с текстом? –  yarin 28.04.2016 в 13:25
1

* Попробуйте

Uri imageUri = Uri.parse(Filepath);
    Intent shareIntent = new Intent();
    shareIntent.setAction(Intent.ACTION_SEND);
    shareIntent.setPackage("com.whatsapp");
    shareIntent.putExtra(Intent.EXTRA_TEXT, "My sample image text");
    shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
    shareIntent.setType("image/jpeg");
    shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    try {
        startActivity(shareIntent);
    } catch (android.content.ActivityNotFoundException ex) {
        ToastHelper.MakeShortText("Kindly install whatsapp first");
    }*
    
ответ дан Sujit Soni 30.06.2016 в 05:40
  • Благодарим вас за этот фрагмент кода, который может оказать немедленную помощь. Правильное объяснение значительно улучшит его образовательную ценность, показывая, почему это является хорошим решением проблемы, и сделало бы его более полезным для будущих читателей с похожими, но не идентичными вопросами. Измените свой ответ, чтобы добавить объяснения, и укажите, какие ограничения и допущения применяются. –  Toby Speight 23.05.2017 в 15:29
1

Для обмена текстом и образ на WhatsApp приведена более контролируемая версия кода, вы можете добавить дополнительные методы для совместного использования с Twitter , Facebook . ..

public class IntentShareHelper {

    public static void shareOnWhatsapp(AppCompatActivity appCompatActivity, String textBody, Uri fileUri) {
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setType("text/plain");
        intent.setPackage("com.whatsapp");
        intent.putExtra(Intent.EXTRA_TEXT,!TextUtils.isEmpty(textBody) ? textBody : "");

        if (fileUri != null) {
            intent.putExtra(Intent.EXTRA_STREAM, fileUri);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.setType("image/*");
        }

        try {
            appCompatActivity.startActivity(intent);
        } catch (android.content.ActivityNotFoundException ex) {
            ex.printStackTrace();
            showWarningDialog(appCompatActivity, appCompatActivity.getString(R.string.error_activity_not_found));
        }
    }

    public static void shareOnTwitter(AppCompatActivity appCompatActivity, String textBody, Uri fileUri){...}

    private static void showWarningDialog(Context context, String message) {
        new AlertDialog.Builder(context)
                .setMessage(message)
                .setNegativeButton(context.getString(R.string.close), new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                })
                .setCancelable(true)
                .create().show();
    }
}

Для получения Uri из файла используйте класс ниже:

public class UtilityFile {
    public static @Nullable Uri getUriFromFile(Context context, @Nullable File file) {
        if (file == null)
            return null;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            try {
                return FileProvider.getUriForFile(context, "com.my.package.fileprovider", file);
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        } else {
            return Uri.fromFile(file);
        }
    }

    // Returns the URI path to the Bitmap displayed in specified ImageView       
    public static Uri getLocalBitmapUri(Context context, ImageView imageView) {
        Drawable drawable = imageView.getDrawable();
        Bitmap bmp = null;
        if (drawable instanceof BitmapDrawable) {
            bmp = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
        } else {
            return null;
        }
        // Store image to default external storage directory
        Uri bmpUri = null;
        try {
            // Use methods on Context to access package-specific directories on external storage.
            // This way, you don't need to request external read/write permission.
            File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "share_image_" + System.currentTimeMillis() + ".png");
            FileOutputStream out = new FileOutputStream(file);
            bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
            out.close();

            bmpUri = getUriFromFile(context, file);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bmpUri;
    }    
}

Для записи FileProvider используйте эту ссылку: Ссылка     

ответ дан Jemshit Iskenderov 24.02.2017 в 10:37
1

На данный момент Whatsapp Intent поддерживает изображение и текст:

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TEXT,title + "\n\nLink : " + link );
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(sharePath));
shareIntent.setType("image/*");
startActivity(Intent.createChooser(shareIntent, "Share image via:"));

Изображение будет таким, как оно есть, и EXTRA_TEXT будет отображаться как подпись.

    
ответ дан Shabbir Dhangot 17.11.2014 в 12:44
  • Не работает. –  Lord Flash 24.02.2016 в 16:02
  • Работа по состоянию на февраль 2016 года –  Akhil Sekharan 02.04.2016 в 10:01
0
public void shareIntentSpecificApps(String articleName, String articleContent, String imageURL) {
    List<Intent> intentShareList = new ArrayList<Intent>();
    Intent shareIntent = new Intent();
    shareIntent.setAction(Intent.ACTION_SEND);
    shareIntent.setType("text/plain");
    //shareIntent.setType("image/*");
    List<ResolveInfo> resolveInfoList = getPackageManager().queryIntentActivities(shareIntent, 0);

    for (ResolveInfo resInfo : resolveInfoList) {
        String packageName = resInfo.activityInfo.packageName;
        String name = resInfo.activityInfo.name;
        Log.d("System Out", "Package Name : " + packageName);
        Log.d("System Out", "Name : " + name);

        if (packageName.contains("com.facebook") ||
                packageName.contains("com.whatsapp")) {


            Intent intent = new Intent();
            intent.setComponent(new ComponentName(packageName, name));
            intent.setAction(Intent.ACTION_SEND);
            intent.setType("text/plain");
            intent.putExtra(Intent.EXTRA_SUBJECT, articleName);
            intent.putExtra(Intent.EXTRA_TEXT, articleName + "\n" + articleContent);
            Drawable dr = ivArticleImage.getDrawable();
            Bitmap bmp = ((GlideBitmapDrawable) dr.getCurrent()).getBitmap();
            intent.putExtra(Intent.EXTRA_STREAM, getLocalBitmapUri(bmp));
            intent.setType("image/*");
            shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intentShareList.add(intent);
        }
    }

    if (intentShareList.isEmpty()) {
        Toast.makeText(ArticleDetailsActivity.this, "No apps to share !", Toast.LENGTH_SHORT).show();
    } else {
        Intent chooserIntent = Intent.createChooser(intentShareList.remove(0), "Share Articles");
        chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentShareList.toArray(new Parcelable[]{}));
        startActivity(chooserIntent);
    }
}

Вы можете обмениваться изображениями, которые я также сделал в своем приложении, как указано в приведенном выше коде.

    
ответ дан Ashok Kateshiya 24.04.2018 в 01:27
0
  1. Скопируйте текст из любого места. Это будет Google, Facebook или whatsapo

  2. попытайтесь загрузить изображение в whatsapp в любом месте. contact или group.before, когда вы нажмете стрелку отправки изображения ... вы увидите параметр caption для этого изображения ... нажмите и удерживайте, появится опция вставки .hit paste ... ваш текст будет отображаться ... тогда вы можете отправить фотографию. и он появится с текстом, который вы хотели ... там вы идете ... у вас есть текст и изображение в нем ... единственной проблемой будет размер текста, который ограничен определенным числом слов

ответ дан John Mboma 17.08.2016 в 09:32
  • Спасибо, брат –  John Mboma 17.08.2016 в 12:31
  • Хотя это может быть ценным советом для решения проблемы, хороший ответ также демонстрирует решение. Пожалуйста, отредактируйте, чтобы предоставить пример кода, чтобы показать, что вы имеете в виду. В качестве альтернативы подумайте о том, чтобы вместо этого писать это как комментарий. –  Toby Speight 23.05.2017 в 15:29