it-swarm.com.de

Verwendung von "Bild freigeben mit" Freigeben beabsichtigt, Bilder in Android gemeinsam zu nutzen?

Ich habe eine Image-Galley-App in dieser App. Ich habe alle Bilder in den drawable-hdpi-Ordner gelegt ... und ich habe Bilder in meiner Aktivität so genannt:

private Integer[] imageIDs = {
        R.drawable.wall1, R.drawable.wall2,
        R.drawable.wall3, R.drawable.wall4,
        R.drawable.wall5, R.drawable.wall6,
        R.drawable.wall7, R.drawable.wall8,
        R.drawable.wall9, R.drawable.wall10
};

Jetzt möchte ich wissen, wie ich diese Bilder freigebe, indem ich das Programm freigebe.

     Button shareButton = (Button) findViewById(R.id.share_button);
     shareButton.setOnClickListener(new View.OnClickListener() {
     public void onClick(View v) {

        Intent sharingIntent = new Intent(Intent.ACTION_SEND);
        Uri screenshotUri = Uri.parse(Images.Media.EXTERNAL_CONTENT_URI + "/" + imageIDs);

        sharingIntent.setType("image/jpeg");
        sharingIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri);
        startActivity(Intent.createChooser(sharingIntent, "Share image using"));  

         }
    });

Und ich habe die Freigabe-Taste auch, wenn ich auf die Freigabe-Taste klicke. Die Freigabe-Box öffnet sich Aber wenn ich einen Dienst geklickt habe, stürzte meistens ab, oder einige Dienste sagen: Bild kann nicht geöffnet werden ein anderer Formatcode zum Freigeben von Bildern ???? 

Bearbeiten:

Ich habe versucht, den folgenden Code zu verwenden. Aber es funktioniert nicht.

Button shareButton = (Button) findViewById(R.id.share_button);
     shareButton.setOnClickListener(new View.OnClickListener() {
     public void onClick(View v) {

        Intent sharingIntent = new Intent(Intent.ACTION_SEND);
        Uri screenshotUri = Uri.parse("Android.resource://com.Android.test/*");
        try {
            InputStream stream = getContentResolver().openInputStream(screenshotUri);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        sharingIntent.setType("image/jpeg");
        sharingIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri);
        startActivity(Intent.createChooser(sharingIntent, "Share image using"));  

         }
    });

Wenn Sie nichts dagegen haben, dass jemand bitte meinen obigen Code korrigiert OR, geben Sie mir ein richtiges Beispiel. Wie kann ich meine Bilder aus dem drawable-hdpi-Ordner freigeben 

66
Abhijeet
Bitmap icon = mBitmap;
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_STREAM, Uri.parse("file:///sdcard/temporary_file.jpg"));
startActivity(Intent.createChooser(share, "Share Image"));
106
superM

Die von superM vorgeschlagene Lösung hat lange Zeit für mich funktioniert, aber kürzlich habe ich sie auf 4.2 (HTC One) getestet und dort aufgehört. Mir ist bewusst, dass dies eine Problemumgehung ist, aber es war die einzige, die für mich mit allen Geräten und Versionen funktionierte. 

Laut Dokumentation werden Entwickler aufgefordert, "das System MediaStore zu verwenden" , um binären Inhalt zu senden. Dies hat jedoch den (Nachteil), dass der Medieninhalt dauerhaft auf dem Gerät gespeichert wird.

Wenn dies eine Option für Sie ist, möchten Sie möglicherweise die Berechtigung WRITE_EXTERNAL_STORAGE erteilen und den systemweiten MediaStore verwenden.

Bitmap icon = mBitmap;
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/jpeg");

ContentValues values = new ContentValues();
values.put(Images.Media.TITLE, "title");
values.put(Images.Media.MIME_TYPE, "image/jpeg");
Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI,
        values);


OutputStream outstream;
try {
    outstream = getContentResolver().openOutputStream(uri);
    icon.compress(Bitmap.CompressFormat.JPEG, 100, outstream);
    outstream.close();
} catch (Exception e) {
    System.err.println(e.toString());
}

share.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(Intent.createChooser(share, "Share Image"));
37
Sebastian Hojas

Fügen Sie zuerst die Berechtigung hinzu

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE"/>

benutze Bitmap von res

Bitmap b =BitmapFactory.decodeResource(getResources(),R.drawable.userimage);
            Intent share = new Intent(Intent.ACTION_SEND);
            share.setType("image/jpeg");
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            b.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
            String path = MediaStore.Images.Media.insertImage(getContentResolver(),
                    b, "Title", null);
            Uri imageUri =  Uri.parse(path);
            share.putExtra(Intent.EXTRA_STREAM, imageUri);
            startActivity(Intent.createChooser(share, "Select"));

Getestet über Bluetooth und andere Messenger

Klappt wunderbar.

20
Hemant Shori

Der einfachste Weg dazu ist die Verwendung des MediaStore zum vorübergehenden Speichern des Bildes, das Sie freigeben möchten:

Drawable mDrawable = mImageView.getDrawable();
Bitmap mBitmap = ((BitmapDrawable) mDrawable).getBitmap();

String path = MediaStore.Images.Media.insertImage(getContentResolver(), mBitmap, "Image Description", null);
Uri uri = Uri.parse(path);

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/jpeg");
intent.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(Intent.createChooser(intent, "Share Image"));

Von: Inhalte mit Absichten teilen

14
Kukiwon

So teilen Sie ein Bild in Android progamatisch: Manchmal möchten Sie eine Momentaufnahme Ihrer Ansicht machen und diese anschließend freigeben. Gehen Sie daher folgendermaßen vor: 1.Fügen Sie der mainfest-Datei die Berechtigung zu 

<uses-permission    
   Android:name="Android.permission.WRITE_EXTERNAL_STORAGE"/>

2.Sie machen Sie zuerst einen Screenshot Ihrer Ansicht, zum Beispiel Bildansicht, Textansicht, Framelayout, LinearLayout etc 

Zum Beispiel haben Sie eine Bildansicht, um einen Screenshot aufzunehmen Rufen Sie diese Methode in oncreate () auf. 

 ImageView image= (ImageView)findViewById(R.id.iv_answer_circle);
     ///take a creenshot
    screenShot(image);

nach dem Aufnehmen eines Screenshots rufen Sie die Bildmethode entweder auf
Klicken Sie auf oder wohin Sie möchten

shareBitmap(screenShot(image),"myimage");

Definieren Sie nach der Erstellungsmethode diese beiden Methoden.

    public Bitmap screenShot(View view) {
    Bitmap bitmap = Bitmap.createBitmap(view.getWidth(),
            view.getHeight(), Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    view.draw(canvas);
    return bitmap;
}

//////// this method share your image
private void shareBitmap (Bitmap bitmap,String fileName) {
    try {
        File file = new File(getContext().getCacheDir(), fileName + ".png");
        FileOutputStream fOut = new FileOutputStream(file);
        bitmap.compress(CompressFormat.PNG, 100, fOut);
        fOut.flush();
        fOut.close();
        file.setReadable(true, false);
        final Intent intent = new Intent(     Android.content.Intent.ACTION_SEND);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
        intent.setType("image/png");
        startActivity(intent);
    } catch (Exception e) {
        e.printStackTrace();
    }

}
11
Najaf Ali

Einfacher und einfachster Code, mit dem Sie Bilder aus der Galerie freigeben können.

 String image_path;
            File file = new File(image_path);
            Uri uri = Uri.fromFile(file);
            Intent intent = new Intent(Intent.ACTION_SEND);
            intent .setType("image/*");
            intent .putExtra(Intent.EXTRA_STREAM, uri);
            context.startActivity(intent );
11
SANJAY GUPTA

Hier ist eine Lösung, die für mich funktioniert hat. Sie müssen die Bilder an einem gemeinsam genutzten oder nicht privaten Ort speichern ( http://developer.Android.com/guide/topics/data/data-storage.html#InternalCache ).

Viele Vorschläge besagen, dass sie im Apps "privaten" Cache-Speicherort gespeichert werden sollen. Dies ist jedoch natürlich nicht über andere externe Anwendungen möglich, einschließlich der generischen Share File-Absicht, die verwendet wird. Wenn Sie dies versuchen, wird es ausgeführt, aber Dropbox zeigt beispielsweise an, dass die Datei nicht mehr verfügbar ist.

/ * SCHRITT 1 - Speichern Sie die Bitmap-Datei lokal mithilfe der Funktion zum Speichern von Dateien. * /

localAbsoluteFilePath = saveImageLocally(bitmapImage);

/ * SCHRITT 2 - Geben Sie den nicht privaten, absoluten Dateipfad für die Freigabedatei ab. * /

if (localAbsoluteFilePath!=null && localAbsoluteFilePath!="") {

    Intent shareIntent = new Intent(Intent.ACTION_SEND);
    Uri phototUri = Uri.parse(localAbsoluteFilePath);

    File file = new File(phototUri.getPath());

    Log.d(TAG, "file path: " +file.getPath());

    if(file.exists()) {
        // file create success

    } else {
        // file create fail
    }
    shareIntent.setData(phototUri);
    shareIntent.setType("image/png");
    shareIntent.putExtra(Intent.EXTRA_STREAM, phototUri);
    activity.startActivityForResult(Intent.createChooser(shareIntent, "Share Via"), Navigator.REQUEST_SHARE_ACTION);
}   

/ * BILDFUNKTION SPEICHERN * /

    private String saveImageLocally(Bitmap _bitmap) {

        File outputDir = Utils.getAlbumStorageDir(Environment.DIRECTORY_DOWNLOADS);
        File outputFile = null;
        try {
            outputFile = File.createTempFile("tmp", ".png", outputDir);
        } catch (IOException e1) {
            // handle exception
        }

        try {
            FileOutputStream out = new FileOutputStream(outputFile);
            _bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
            out.close();

        } catch (Exception e) {
            // handle exception
        }

        return outputFile.getAbsolutePath();
    }

/ * SCHRITT 3 - Ergebnis der Freigabedatei-Intent-Behandlung. Benötigen Sie eine temporäre Datei aus der Ferne usw. * /

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

            // deal with this with whatever constant you use. i have a navigator object to handle my navigation so it also holds all mys constants for intents
        if (requestCode== Navigator.REQUEST_SHARE_ACTION) {
            // delete temp file
            File file = new File (localAbsoluteFilePath);
            file.delete();

            Toaster toast = new Toaster(activity);
            toast.popBurntToast("Successfully shared");
        }


    }   

Ich hoffe das hilft jemandem.

10
wired00

Ich war müde beim Suchen nach verschiedenen Optionen zum Freigeben von Ansichten oder Bildern aus meiner Anwendung für andere Anwendungen. Und endlich habe ich die Lösung gefunden. 

Schritt 1: Freigabe-Blockierung. Das Fenster mit der Liste der Anwendungen in Ihrem Telefon wird geöffnet

public void share_bitMap_to_Apps() {

    Intent i = new Intent(Intent.ACTION_SEND);

    i.setType("image/*");
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    /*compress(Bitmap.CompressFormat.PNG, 100, stream);
    byte[] bytes = stream.toByteArray();*/


    i.putExtra(Intent.EXTRA_STREAM, getImageUri(mContext, getBitmapFromView(relative_me_other)));
    try {
        startActivity(Intent.createChooser(i, "My Profile ..."));
    } catch (Android.content.ActivityNotFoundException ex) {

        ex.printStackTrace();
    }


}

Schritt 2: Konvertieren Ihrer Ansicht in BItmap

public static Bitmap getBitmapFromView(View view) {
    //Define a bitmap with the same size as the view
    Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(),      view.getHeight(), Bitmap.Config.ARGB_8888);
    //Bind a canvas to it
    Canvas canvas = new Canvas(returnedBitmap);
    //Get the view's background
    Drawable bgDrawable = view.getBackground();
    if (bgDrawable != null)
        //has background drawable, then draw it on the canvas
        bgDrawable.draw(canvas);
    else
        //does not have background drawable, then draw white background on the canvas
        canvas.drawColor(Color.WHITE);
    // draw the view on the canvas
    view.draw(canvas);
    //return the bitmap
    return returnedBitmap;
}

Schritt 3 :

Um den URI von Bitmap Image zu erhalten

public Uri getImageUri(Context inContext, Bitmap inImage) {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);

    String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
    return Uri.parse(path);
}
7
AshisParajuli

Ich hatte gerade das gleiche Problem. 
Hier ist eine Antwort, bei der in Ihrem Hauptcode kein explizites Schreiben von Dateien verwendet wird (das API sich darum kümmern muss).

Drawable mDrawable = myImageView1.getDrawable();
Bitmap mBitmap = ((BitmapDrawable)mDrawable).getBitmap();
String path = MediaStore.Images.Media.insertImage(getContentResolver(), mBitmap, "Image I want to share", null);
Uri uri = Uri.parse(path);
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
shareIntent.setType("image/*");
startActivity(Intent.createChooser(shareIntent, "Share Image"));

Dies ist der Pfad ... Sie müssen lediglich Ihre Bild-IDs in einem Drawable-Objekt hinzufügen. In meinem Fall (Code oben) wurde das Drawable aus einer ImageView extrahiert.

3
vianna77

Die SuperM-Antwort funktionierte für mich jedoch mit Uri.fromFile () anstelle von Uri.parse ().

Mit Uri.parse () funktionierte es nur mit Whatsapp.

Das ist mein Code: 

sharingIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(mFile));

Ausgabe von Uri.parse ():
/storage/emuliert/0/Android/data/Anwendungspaket/Dateien/17072015_0927.jpg

Ausgabe von Uri.fromFile:
file: ///storage/emulated/0/Android/data/application_package/Files/17072015_0927.jpg

3
cgr

ref: - http://developer.Android.com/training/sharing/send.html#send-multiple-content

ArrayList<Uri> imageUris = new ArrayList<Uri>();
imageUris.add(imageUri1); // Add your image URIs here
imageUris.add(imageUri2);

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
shareIntent.setType("image/*");
startActivity(Intent.createChooser(shareIntent, "Share images to.."));
3
Bikesh M Annur

versuche dies,

Uri imageUri = Uri.parse("Android.resource://your.package/drawable/fileName");
      Intent intent = new Intent(Intent.ACTION_SEND);
      intent.setType("image/png");

      intent.putExtra(Intent.EXTRA_STREAM, imageUri);
      startActivity(Intent.createChooser(intent , "Share"));
2
Ganpat Kaliya

Eine perfekte Lösung für das Teilen von Text und Bild via Intent ist:

Klicken Sie auf Ihrem Share-Button:

Bitmap image;
shareimagebutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            URL url = null;
            try {
                url = new URL("https://firebasestorage.googleapis.com/v0/b/fir-notificationdemo-dbefb.appspot.com/o/abc_text_select_handle_middle_mtrl_light.png?alt=media&token=c624ab1b-f840-479e-9e0d-6fe8142478e8");
                image = BitmapFactory.decodeStream(url.openConnection().getInputStream());
            } catch (IOException e) {
                e.printStackTrace();
            }
            shareBitmap(image);
        }
    });

Dann erstellen Sie die shareBitmap (image) -Methode.

private void shareBitmap(Bitmap bitmap) {

    final String shareText = getString(R.string.share_text) + " "
            + getString(R.string.app_name) + " developed by "
            + "https://play.google.com/store/apps/details?id=" + getPackageName() + ": \n\n";

    try {
        File file = new File(this.getExternalCacheDir(), "share.png");
        FileOutputStream fOut = new FileOutputStream(file);
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
        fOut.flush();
        fOut.close();
        file.setReadable(true, false);
        final Intent intent = new Intent(Android.content.Intent.ACTION_SEND);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.putExtra(Intent.EXTRA_TEXT, shareText);
        intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
        intent.setType("image/png");
        startActivity(Intent.createChooser(intent, "Share image via"));

    } catch (Exception e) {
        e.printStackTrace();
    }

}

Und dann teste es einfach .. !!

1
Devangi
Strring temp="facebook",temp="whatsapp",temp="instagram",temp="googleplus",temp="share";

    if(temp.equals("facebook"))
    {
        Intent intent = getPackageManager().getLaunchIntentForPackage("com.facebook.katana");
        if (intent != null) {

            Intent shareIntent = new Intent(Android.content.Intent.ACTION_SEND);
            shareIntent.setType("image/png");
            shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + "/sdcard/folder name/abc.png"));
            shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            shareIntent.setPackage("com.facebook.katana");
            startActivity(shareIntent);

        }
        else
        {
            Toast.makeText(MainActivity.this, "Facebook require..!!", Toast.LENGTH_SHORT).show();
        }
    }
    if(temp.equals("whatsapp"))
    {

        try {
            File filePath = new File("/sdcard/folder name/abc.png");
            final ComponentName name = new ComponentName("com.whatsapp", "com.whatsapp.ContactPicker");
            Intent oShareIntent = new Intent();
            oShareIntent.setComponent(name);
            oShareIntent.setType("text/plain");
            oShareIntent.putExtra(Android.content.Intent.EXTRA_TEXT, "Website : www.google.com");
            oShareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(filePath));
            oShareIntent.setType("image/jpeg");
            oShareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            MainActivity.this.startActivity(oShareIntent);


        } catch (Exception e) {
            Toast.makeText(MainActivity.this, "WhatsApp require..!!", Toast.LENGTH_SHORT).show();
        }
    }
    if(temp.equals("instagram"))
    {
        Intent intent = getPackageManager().getLaunchIntentForPackage("com.instagram.Android");
        if (intent != null)
        {
            File filePath =new File("/sdcard/folder name/"abc.png");
            Intent shareIntent = new Intent(Android.content.Intent.ACTION_SEND);
            shareIntent.setType("image");
            shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + "/sdcard/Chitranagari/abc.png"));
            shareIntent.setPackage("com.instagram.Android");
            startActivity(shareIntent);

        }
        else
        {
            Toast.makeText(MainActivity.this, "Instagram require..!!", Toast.LENGTH_SHORT).show();

        }
    }
    if(temp.equals("googleplus"))
    {

        try
        {

            Calendar c = Calendar.getInstance();
            SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss");
            String strDate = sdf.format(c.getTime());
            Intent shareIntent = ShareCompat.IntentBuilder.from(MainActivity.this).getIntent();
            shareIntent.setType("text/plain");
            shareIntent.putExtra(Intent.EXTRA_TEXT, "Website : www.google.com");
            shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + "/sdcard/folder name/abc.png"));
            shareIntent.setPackage("com.google.Android.apps.plus");
            shareIntent.setAction(Intent.ACTION_SEND);
            startActivity(shareIntent);
        }catch (Exception e)
        {
            e.printStackTrace();
            Toast.makeText(MainActivity.this, "Googleplus require..!!", Toast.LENGTH_SHORT).show();
        }
    }
    if(temp.equals("share")) {

        File filePath =new File("/sdcard/folder name/abc.png");  //optional //internal storage
        Intent shareIntent = new Intent();
        shareIntent.setAction(Intent.ACTION_SEND);
        shareIntent.putExtra(Intent.EXTRA_TEXT, "Website : www.google.com");
        shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(filePath));  //optional//use this when you want to send an image
        shareIntent.setType("image/jpeg");
        shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        startActivity(Intent.createChooser(shareIntent, "send"));

    }
0
hardip

Die obige Lösung funktioniert nicht für mich in Android Api 26 & 27 (Oreo), sondern Error: exposed beyond app through ClipData.Item.getUri. Die Lösung, die in meine Situation passt, war 

  1. holen Sie sich den Pfad-URI mit FileProvider.getUriForFile(Context,packagename,File) as 
void shareImage() {
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setType("image/*");
        intent.putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(this,getPackageName(),deleteFilePath));
        startActivity(Intent.createChooser(intent,"Share with..."));
    }
  1. Definieren Sie einen <provider> in Ihrem Manifest.xml als
<provider
     Android:name="Android.support.v4.content.FileProvider"
     Android:authorities="com.example.stickerapplication"
      Android:exported="false"
      Android:grantUriPermissions="true">
      <meta-data
          Android:name="Android.support.FILE_PROVIDER_PATHS"
          Android:resource="@xml/file_paths">
       </meta-data>
</provider>
  1. Als letzten Schritt definieren Sie die resource-Datei für Ihre Verzeichnisse
<paths xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <external-path name="external_files" path="." />
</paths>
*Note this solution is for `external storage` `uri`
0
Ali Tamoor

Zuerst müssen Sie diesen FileProvider in Ihrer AndroidManifest.xml-Datei innerhalb des <application>-Tags angeben:

<provider
    Android:name="Android.support.v4.content.FileProvider"
    Android:authorities="com.appsuite.fileprovider"
    Android:exported="false"
    Android:grantUriPermissions="true">
    <meta-data
        Android:name="Android.support.FILE_PROVIDER_PATHS"
        Android:resource="@xml/fileprovider" />
</provider>

Zweitens , Erstellen Sie eine XML-Datei fileprovider.xml im Verzeichnis xml:

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-files-path name="images" path="Pictures" />
</paths>

Zum Schluss programmieren Sie programmgesteuert und teilen Sie Uri mit Ihrer Ziel-App:

//  --------------------------  Share Image  -----------------------
private void shareImage() {
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("image/*");

    intent.putExtra(Intent.EXTRA_STREAM, getShareUri());
    startActivity(Intent.createChooser(intent, "Share image using"));
}

private Uri getShareUri(){
    try {
        File file = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "share_image_" + System.currentTimeMillis() + ".png");
        if (file.createNewFile()) {
            FileChannel source = new FileInputStream(currentFile).getChannel();  // currentFile After edit image current sate
            FileChannel destination = new FileOutputStream(file).getChannel();

            destination.transferFrom(source, 0, source.size());
            source.close();
            destination.close();
        }

        sharedFileUri = FileProvider.getUriForFile(this, "com.appsuite.fileprovider", file);
        return sharedFileUri;

    }catch (Exception e){
        Log.e(TAG, "shareImage: error - " + e.getMessage(), e);
        return null;
    }
}

Ich habe das getestet und es funktioniert perfekt von API 19 bis 28.

0
Hasib Akter