wake-up-neo.net

Wie teile ich Bild + Text mit ACTION_SEND in Android zusammen?

Ich möchte Text + Bild zusammen mit ACTION_SEND in Android teilen. Ich verwende den folgenden Code. Ich kann nur Bild teilen, aber ich kann keinen Text damit teilen.

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

Irgendeine Hilfe dazu?

36
Hiren Patel

mit diesen Codes können Sie einfachen Text freigeben

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

so wird Ihr vollständiger Code (Ihr Bild + Text)

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

Ich habe gerade image/* mit */*

pdate:

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

bitte sehen Sie sich diesen Code an, damit ich einen Text und ein Bild gemeinsam verwenden kann

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"));

Vergessen Sie nicht, WRITE_EXTERNAL_STORAGE die Berechtigung zu erteilen

auch bei facebook kann es nur das bild teilen, da facebook nicht erlaubt, den text absichtlich zu teilen

10

Möglicherweise ist die Freigabe-App (FB, Twitter usw.) nicht berechtigt, das Bild zu lesen.

Googles Dokument sagt:

Die empfangende Anwendung benötigt eine Berechtigung, um auf die Daten zuzugreifen, auf die der Uri zeigt. Die empfohlenen Methoden hierfür sind:

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

Ich bin nicht sicher, ob die Freigabe-Apps Berechtigungen zum Lesen eines Bildes im Bundle unserer Apps haben. Aber meine Dateien gespeichert in

 Activity.getFilesDir()

kann nicht gelesen werden. Wie im obigen Link vorgeschlagen, können Sie Bilder im MediaStore speichern, in dem die Freigabe-Apps Leseberechtigungen haben.

Update1: Im Folgenden wird der Code zum Teilen von Bildern mit Text in 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"));

Der Nebeneffekt ist, dass wir dem MediaStore ein Bild hinzufügen.

6
Anson Yao

Ich habe eine Weile nach einer Lösung für diese Frage gesucht und festgestellt, dass diese funktioniert. Ich hoffe, sie hilft.

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

versuchen Sie es mit diesem Code. Ich lade ic_launcher von drawable hoch. Sie können dies mit Ihrer Datei von gallary oder bitmap ändern.

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

Überprüfen Sie den folgenden Code, den es für mich arbeitete

    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

Um ein zeichnungsfähiges Bild freizugeben, muss das Bild zuerst im Cache des Geräts oder in einem externen Speicher gespeichert werden.

Wir prüfen, ob "sharable_image.jpg" bereits im Cache vorhanden ist. Falls vorhanden, wird der Pfad aus der vorhandenen Datei abgerufen.

Andernfalls wird das zu zeichnende Bild im Cache gespeichert.

Das gespeicherte Bild wird dann absichtlich freigegeben.

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

Aus Versehen (der Textnachrichtenteil, den ich aufgegeben hatte) bemerkte ich, dass die Nachrichten-App mit dem Text von Intent.EXTRA_SUBJECT und dem Bild, das zum Senden bereit ist, geöffnet wurde, wenn ich die Nachrichten-App auswählte, hoffe ich es hilft.

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