web-dev-qa-db-fra.com

Comment partager ensemble une image et un texte à l'aide d'ACTION_SEND dans Android?

Je souhaite partager le texte et l'image ensemble à l'aide d'ACTION_SEND dans Android. J'utilise le code ci-dessous. Je ne peux partager que l'image, mais je ne peux pas partager de texte avec.

private Uri imageUri;
private Intent intent;

imageUri = Uri.parse("Android.resource://" + getPackageName()+ "/drawable/" + "ic_launcher");
intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT, "Hello");
intent.putExtra(Intent.EXTRA_STREAM, imageUri);
intent.setType("image/*");
startActivity(intent);

Toute aide sur ceci?

36
Hiren Patel

vous pouvez partager du texte brut par ces codes

String shareBody = "Here is the share content body";
    Intent sharingIntent = new Intent(Android.content.Intent.ACTION_SEND);
        sharingIntent.setType("text/plain");
        sharingIntent.putExtra(Android.content.Intent.EXTRA_SUBJECT, "Subject Here");
        sharingIntent.putExtra(Android.content.Intent.EXTRA_TEXT, shareBody);
        startActivity(Intent.createChooser(sharingIntent, getResources().getString(R.string.share_using)));

de sorte que votre code complet (votre image + texte) devient

      private Uri imageUri;
      private Intent intent;

            imageUri = Uri.parse("Android.resource://" + getPackageName()
                    + "/drawable/" + "ic_launcher");

            intent = new Intent(Intent.ACTION_SEND);
//text
            intent.putExtra(Intent.EXTRA_TEXT, "Hello");
//image
            intent.putExtra(Intent.EXTRA_STREAM, imageUri);
//type of things
            intent.setType("*/*");
//sending
            startActivity(intent);

Je viens de remplacer image/* avec */*

mise à jour:

Uri imageUri = Uri.parse("Android.resource://" + getPackageName()
        + "/drawable/" + "ic_launcher");
 Intent shareIntent = new Intent();
 shareIntent.setAction(Intent.ACTION_SEND);
 shareIntent.putExtra(Intent.EXTRA_TEXT, "Hello");
 shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
 shareIntent.setType("image/jpeg");
 shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
 startActivity(Intent.createChooser(shareIntent, "send"));
46
Ahmed Ekri

s'il vous plaît jeter un oeil sur ce code a travaillé pour moi de partager un texte et une image ensemble

Intent shareIntent;
    Bitmap bitmap= BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher);
    String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)+"/Share.png";
    OutputStream out = null;
    File file=new File(path);
    try {
        out = new FileOutputStream(file);
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
        out.flush();
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    path=file.getPath();
    Uri bmpUri = Uri.parse("file://"+path);
    shareIntent = new Intent(Android.content.Intent.ACTION_SEND);
    shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    shareIntent.putExtra(Intent.EXTRA_STREAM, bmpUri);
    shareIntent.putExtra(Intent.EXTRA_TEXT,"Hey please check this application " + "https://play.google.com/store/apps/details?id=" +getPackageName());
    shareIntent.setType("image/png");
    startActivity(Intent.createChooser(shareIntent,"Share with"));

N'oubliez pas de donner l'autorisation WRITE_EXTERNAL_STORAGE

également sur facebook, il ne peut que partager l'image, car facebook ne permet pas de partager le texte via l'intention.

10
Dharmesh rughani

C'est peut-être parce que l'application de partage (FB, Twitter, etc.) peut ne pas avoir l'autorisation de lire l'image.

Le document de Google dit:

L’application destinataire a besoin d’autorisation pour accéder aux données vers lesquelles pointe Uri. Les moyens recommandés pour ce faire sont:

http://developer.Android.com/training/sharing/send.html

Je ne suis pas sûr que les applications de partage disposent des autorisations nécessaires pour lire une image dans l'ensemble de nos applications. Mais mes fichiers enregistrés dans

 Activity.getFilesDir()

ne peut pas être lu. Comme suggéré dans le lien ci-dessus, nous pouvons envisager de stocker des images dans le MediaStore, où les applications de partage sont autorisées à lire.

Update1: Ce qui suit est un code fonctionnel pour partager une image avec du texte dans Android 4.4.

        Bitmap bm = BitmapFactory.decodeFile(file.getPath());
        intent.putExtra(Intent.EXTRA_TEXT, Constant.SHARE_MESSAGE
            + Constant.SHARE_URL);
        String url= MediaStore.Images.Media.insertImage(this.getContentResolver(), bm, "title", "description");
        intent.putExtra(Intent.EXTRA_STREAM, Uri.parse(url));
        intent.setType("image/*");
        startActivity(Intent.createChooser(intent, "Share Image"));

L'effet secondaire est que nous ajoutons une image dans le MediaStore.

6
Anson Yao

Je cherchais une solution à cette question depuis un moment et j'ai trouvé celle-ci opérationnelle, j'espère que cela aidera.

private BitmapDrawable bitmapDrawable;
private Bitmap bitmap1;
//write this code in your share button or function

bitmapDrawable = (BitmapDrawable) mImageView.getDrawable();// get the from imageview or use your drawable from drawable folder
bitmap1 = bitmapDrawable.getBitmap();
String imgBitmapPath= MediaStore.Images.Media.insertImage(getContentResolver(),bitmap1,"title",null);
Uri imgBitmapUri=Uri.parse(imgBitmapPath);
String shareText="Share image and text";
Intent shareIntent=new Intent(Intent.ACTION_SEND);
shareIntent.setType("*/*");
shareIntent.putExtra(Intent.EXTRA_STREAM,imgBitmapUri);
shareIntent.putExtra(Intent.EXTRA_TEXT, shareText);
startActivity(Intent.createChooser(shareIntent,"Share Wallpaper using"));
2
Raunak Verma

essayez d'utiliser ce code.Je télécharge ic_launcher depuis drawable.vous pouvez le changer avec votre fichier gallary ou bitmap.

void share() {
    Bitmap icon = BitmapFactory.decodeResource(getResources(),
                R.drawable.ic_launcher);
    Intent share = new Intent(Intent.ACTION_SEND);
    share.setType("image/jpeg");
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    icon.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    File f = new File(Environment.getExternalStorageDirectory()
                + File.separator + "temporary_file.jpg");
    try {
        f.createNewFile();
        FileOutputStream fo = new FileOutputStream(f);
        fo.write(bytes.toByteArray());
    } catch (IOException e) {
        e.printStackTrace();
    }
    share.putExtra(Intent.EXTRA_TEXT, "hello #test");
    
    share.putExtra(Intent.EXTRA_STREAM,
            Uri.parse("file:///sdcard/temporary_file.jpg"));                    
    startActivity(Intent.createChooser(share, "Share Image"));
}
1
nidhi
String text = "Look at my awesome picture";
Uri pictureUri = Uri.parse("file://my_picture");
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TEXT, text);
shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
shareIntent.setType("image/*");
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(shareIntent, "Share images..."));
1
Manish Ahire

Vérifiez le code ci-dessous cela a fonctionné pour moi

    Picasso.with(getApplicationContext()).load("image url path").into(new Target() {

           @Override

            public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                Intent i = new Intent(Intent.ACTION_SEND);
                i.putExtra(Intent.EXTRA_TEXT, "Let me recommend you this application" +
                        "\n"+ "your share url or text ");
                i.setType("image/*");
                i.putExtra(Intent.EXTRA_STREAM, getLocalBitmapUri(bitmap));
                context.startActivity(Intent.createChooser(i, "Share using"));
            }

            @Override
            public void onBitmapFailed(Drawable errorDrawable) {
            }

            @Override
            public void onPrepareLoad(Drawable placeHolderDrawable) {
            }
        });


     private Uri getLocalBitmapUri(Bitmap bmp) {
      Uri bmpUri = null;
      try {
          File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "share_image_" + System.currentTimeMillis() + ".png");
        FileOutputStream out = new FileOutputStream(file);
        bmp.compress(Bitmap.CompressFormat.PNG, 50, out);
        out.close();
        bmpUri = Uri.fromFile(file);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return bmpUri;
}
1
Sachin Yadav

Pour partager une image pouvant être dessinée, celle-ci doit d'abord être enregistrée dans le cache de l'appareil ou dans un stockage externe.

Nous vérifions si "sharable_image.jpg" existe déjà dans le cache, s'il existe, le chemin est extrait du fichier existant.

Sinon, l'image pouvant être dessinée est enregistrée dans la mémoire cache.

L'image enregistrée est ensuite partagée à l'aide de l'intention.

private void share() {
    int sharableImage = R.drawable.person2;
    Bitmap bitmap= BitmapFactory.decodeResource(getResources(), sharableImage);
    String path = getExternalCacheDir()+"/sharable_image.jpg";
    Java.io.OutputStream out;
    Java.io.File file = new Java.io.File(path);

    if(!file.exists()) {
        try {
            out = new Java.io.FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
            out.flush();
            out.close();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

    path = file.getPath();

    Uri bmpUri = Uri.parse("file://" + path);

    Intent shareIntent = new Intent(Android.content.Intent.ACTION_SEND);
    shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    shareIntent.putExtra(Intent.EXTRA_TEXT, "This is a sample body with more detailed description");
    shareIntent.putExtra(Intent.EXTRA_STREAM, bmpUri);
    shareIntent.setType("image/*");
    startActivity(Intent.createChooser(shareIntent,"Share with"));
}
1
Mainong

Par accident (la partie du message texte, j’avais abandonné cela), j’ai remarqué que lorsque je choisissais Messages App pour traiter la demande, celle-ci s’ouvrait avec le texte de Intent.EXTRA_SUBJECT plus l’image prête à être envoyée, j’espère ça aide.

String[] recipient = {"your_email_here"};
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, recipient);
intent.putExtra(Intent.EXTRA_SUBJECT, "Hello, this is the subject line");
intent.putExtra(Intent.EXTRA_TEXT, messageEditText.getText().toString());
intent.putExtra(Intent.EXTRA_STREAM, imageUri);
intent.setType("image/*");
0
Ivan