Mam aplikację graficzną w tej aplikacji. Umieściłem wszystkie obrazy w folderze drawable-hdpi. i nazwałem obrazy w mojej działalności w ten sposób:
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
};
Więc teraz chcę wiedzieć, jak udostępnić te obrazy za pomocą zamiaru udostępniania, który umieściłem kod udostępniania w następujący sposób:
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"));
}
});
I mam przycisk udostępniania również po kliknięciu przycisku udostępniania Okno udostępniania otwiera się Ale kiedy kliknąłem jakąkolwiek usługę, głównie jej awarię lub niektóre usługi mówią: nie można otworzyć obrazu Więc jak mogę to naprawić lub czy istnieje inny kod formatu do udostępniania obrazów ????
Edytować :
Próbowałem użyć poniższego kodu. Ale to nie działa.
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"));
}
});
Jeśli nie masz nic przeciwko, proszę, popraw mój powyższy kod LUB daj mi odpowiedni przykład plz Jak mogę udostępniać moje obrazy z folderu drawable-hdpi
Odpowiedzi:
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"));
źródło
File f = File.createTempFile("sharedImage", suffix, getExternalCacheDir());
i używaniushare.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f));
?Rozwiązanie proponowane od superM długo działało u mnie, ale ostatnio testowałem je na 4.2 (HTC One) i tam przestało działać. Zdaję sobie sprawę, że jest to obejście, ale było to jedyne, które działało dla mnie ze wszystkimi urządzeniami i wersjami.
Zgodnie z dokumentacją programiści proszeni są o „korzystanie z systemu MediaStore” do przesyłania treści binarnych. Ma to jednak (wady) tę zaletę, że treści multimedialne zostaną trwale zapisane na urządzeniu.
Jeśli to opcja dla Ciebie, możesz przyznać uprawnienia
WRITE_EXTERNAL_STORAGE
i korzystać z ogólnosystemowego magazynu MediaStore.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"));
źródło
Najpierw dodaj uprawnienia
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
używając Bitmap z zasobów
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"));
Przetestowano przez Bluetooth i inne komunikatory
źródło
Najłatwiej to zrobić, używając MediaStore do tymczasowego przechowywania obrazu, który chcesz udostępnić:
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"));
Od: Udostępnianie treści z intencjami
źródło
canvas
zmiennej, nie jest stosowany wszędzie.Jak progresywnie udostępniać obraz w systemie Android, czasami chcesz zrobić migawkę swojego widoku, a następnie chcesz go udostępnić, wykonaj następujące kroki: 1. Dodaj uprawnienia do pliku mainfest
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2.Bardzo Najpierw zrób zrzut ekranu swojego widoku, na przykład jest to Imageview, Textview, Framelayout, LinearLayout itp.
Na przykład masz widok obrazu, aby zrobić zrzut ekranu, wywołaj tę metodę w oncreate ()
ImageView image= (ImageView)findViewById(R.id.iv_answer_circle); ///take a creenshot screenShot(image);
po zrobieniu zrzutu ekranu metodą udostępniania obrazu po kliknięciu
przycisku lub w dowolnym miejscu
shareBitmap(screenShot(image),"myimage");
Po utworzeniu metody zdefiniuj te dwie metody ##
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(); } }
źródło
Prosty i najłatwiejszy kod, którego możesz użyć do udostępnienia obrazu z galerii.
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 );
źródło
Oto rozwiązanie, które zadziałało dla mnie. Jedna trudność polega na tym, że musisz przechowywać obrazy w udostępnionej lokalizacji prywatnej lub innej niż prywatna aplikacja ( http://developer.android.com/guide/topics/data/data-storage.html#InternalCache )
Wiele sugestii mówi, aby przechowywać w
Apps
„prywatnej” lokalizacji pamięci podręcznej, ale oczywiście nie jest ona dostępna za pośrednictwem innych aplikacji zewnętrznych, w tym ogólnej intencji Udostępnij plik, która jest używana. Kiedy spróbujesz, zadziała, ale na przykład Dropbox poinformuje Cię, że plik nie jest już dostępny./ * KROK 1 - Zapisz plik mapy bitowej lokalnie, korzystając z poniższej funkcji zapisywania plików. * /
localAbsoluteFilePath = saveImageLocally(bitmapImage);
/ * KROK 2 - Udostępnij nieprywatną ścieżkę pliku Absolute do zamiaru udziału pliku * /
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); }
/ * FUNKCJA ZAPISZ OBRAZ * /
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(); }
/ * KROK 3 - Obsługa wyniku zamiaru udostępniania pliku. Potrzebujesz zdalnego pliku tymczasowego itp. * /
@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"); } }
Mam nadzieję, że to komuś pomoże.
źródło
Byłem zmęczony szukaniem różnych opcji udostępniania widoku lub obrazu z mojej aplikacji do innej aplikacji. I wreszcie znalazłem rozwiązanie.
Krok 1: Udostępnij blok obsługi zamiarów. Spowoduje to wyświetlenie okna z listą aplikacji w telefonie
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(); } }
Krok 2: Konwersja widoku do 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; }
Krok 3 :
Aby uzyskać identyfikator URI z obrazu bitmapowego
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); }
źródło
Po prostu miałem ten sam problem.
Oto odpowiedź, która nie używa żadnego jawnego zapisu plików w głównym kodzie (pozwalając api zająć się tym za Ciebie).
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"));
To jest ścieżka ... wystarczy dodać identyfikatory obrazu do obiektu do rysowania. W moim przypadku (kod powyżej) drawable został wyodrębniony z ImageView.
źródło
Odpowiedź SuperM działała dla mnie, ale z Uri.fromFile () zamiast Uri.parse ().
Z Uri.parse () działało tylko z Whatsapp.
To jest mój kod:
sharingIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(mFile));
Dane wyjściowe Uri.parse ():
/storage/emulated/0/Android/data/application_package/Files/17072015_0927.jpg
Wyjście Uri.fromFile:
file: ///storage/emulated/0/Android/data/application_package/Files/17072015_0927.jpg
źródło
Spróbuj tego,
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"));
źródło
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.."));
źródło
Idealnym rozwiązaniem do udostępniania tekstu i obrazu za pośrednictwem intencji jest:
Kliknij przycisk udostępniania:
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); } });
Następnie utwórz metodę shareBitmap (obraz).
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(); } }
A potem po prostu to przetestuj .. !!
źródło
Wszystkie powyższe rozwiązanie nie działa dla mnie
Android Api 26 & 27 (Oreo)
, otrzymywałemError: exposed beyond app through ClipData.Item.getUri
. Rozwiązaniem pasującym do mojej sytuacji byłoFileProvider.getUriForFile(Context,packagename,File)
asvoid 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...")); }
<provider>
w swoimManifest.xml
as<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>
resource
pliku dla twoich katalogów<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`
źródło
Dzięki wszystkim, wypróbowałem kilka podanych opcji, ale wydaje się, że nie działają one w najnowszych wydaniach Androida, więc dodałem zmodyfikowane kroki, które działają w najnowszych wersjach Androida. są one oparte na kilku z powyższych odpowiedzi, ale z modyfikacjami, a rozwiązanie opiera się na wykorzystaniu dostawcy plików:
Krok 1
Dodaj następujący kod w pliku manifestu:
<provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_provider_paths" /> </provider>
krok: 2 Utwórz plik XML w res> xml
Utwórz plik file_provider_paths wewnątrz xml.
Zauważ, że jest to plik, który zawarliśmy w android: resource w poprzednim kroku.
Wpisz następujące kody wewnątrz file_provider_paths:
<?xml version="1.0" encoding="utf-8"?> <paths> <cache-path name="cache" path="/" /> <files-path name="files" path="/" /> </paths>
Krok 3
Następnie przejdź do przycisku Kliknij:
Button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Bitmap bit = BitmapFactory.decodeResource(context.getResources(), R.drawable.filename); File filesDir = context.getApplicationContext().getFilesDir(); File imageFile = new File(filesDir, "birds.png"); OutputStream os; try { os = new FileOutputStream(imageFile); bit.compress(Bitmap.CompressFormat.PNG, 100, os); os.flush(); os.close(); } catch (Exception e) { Log.e(getClass().getSimpleName(), "Error writing bitmap", e); } Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND); intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); Uri imageUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID, imageFile); intent.putExtra(Intent.EXTRA_STREAM, imageUri); intent.setType("image/*"); context.startActivity(intent); } });
Aby uzyskać bardziej szczegółowe wyjaśnienia, odwiedź https://droidlytics.wordpress.com/2020/08/04/use-fileprovider-to-share-image-from-recyclerview/
źródło
Dzięki wdrożeniu bardziej rygorystycznych zasad zabezpieczeń ujawnienie identyfikatora URI poza aplikacją generuje błąd i powoduje awarie aplikacji.
Odpowiedź @Ali Tamoor wyjaśnia użycie dostawców plików, jest to zalecany sposób.
Aby uzyskać więcej informacji, zobacz - https://developer.android.com/training/secure-file-sharing/setup-sharing
Musisz również dołączyć do projektu bibliotekę rdzenia Androidax.
implementation "androidx.core:core:1.2.0"
Oczywiście jest to trochę obszerna biblioteka i potrzebuję jej tylko do udostępniania plików - jeśli istnieje lepszy sposób, daj mi znać.
źródło
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")); }
źródło
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE)) { Log.d(TAG, "Permission granted"); } else { ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 100); } fab.setOnClickListener(v -> { Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.refer_pic); Intent share = new Intent(Intent.ACTION_SEND); share.setType("image/*"); ByteArrayOutputStream bytes = new ByteArrayOutputStream(); b.compress(Bitmap.CompressFormat.JPEG, 100, bytes); String path = MediaStore.Images.Media.insertImage(requireActivity().getContentResolver(), b, "Title", null); Uri imageUri = Uri.parse(path); share.putExtra(Intent.EXTRA_STREAM, imageUri); share.putExtra(Intent.EXTRA_TEXT, "Here is text"); startActivity(Intent.createChooser(share, "Share via")); });
źródło