Як використовувати спільний доступ “Поділитися зображенням” Намір ділитися зображеннями в Android?


80

У мене є програма галереї зображень, в якій я розмістив усі зображення в папці drawable-hdpi. і я називав зображення у своїй діяльності так:

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

Отже, тепер я хочу знати, як мені поділитися цими зображеннями, використовуючи спільний намір.

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

І у мене є кнопка спільного доступу також, коли я натискаю кнопку спільного доступу. Поле відкриття відкривається. Але коли я натиснув будь-яку службу, здебільшого її збій або деякі служби кажуть: не вдається відкрити зображення. Так як я можу це виправити, чи є інший код формату для обміну зображеннями ????

Редагувати:

Я спробував використати код нижче. Але це не працює.

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

         }
    });

Якщо не заперечуєте, хтось plz виправте мій вищезазначений код АБО дайте мені належний приклад plz Як мені поділитися своїми зображеннями з папки drawable-hdpi


ви передаєте цілий масив у метод синтаксичного аналізу URI
Пратік

Ви встановлюєте неправильний URI. Тому і виникає ця проблема. Знову ви намагаєтеся розділити кілька зображень , так що ви повинні використовувати stackoverflow.com/questions/2264622 / ... .. А для створення правильного URI ви повинні спробувати stackoverflow.com/questions/6602417 / ...
Картік Domadiya

допоможіть мені тут stackoverflow.com/questions/31826494/…
Адітя

перегляньте цей навчальний посібник спільним зображенням із папки, яку можна
малювати

Відповіді:


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

3
Чи є причина проти використання File f = File.createTempFile("sharedImage", suffix, getExternalCacheDir());та використання share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f));?
cimnine

15
Так, якщо ви використовуєте createTempFile, то файл створюється в каталозі, приватному для вашої програми. Таким чином, інші програми (тобто ті, з якими ви надаєте спільний доступ) не зможуть отримати зображення.
aleph_null

7
Також слід закрити вихідний потік.
Maarten

2
@superM може допомогти мені, як я можу поділитися з папкою, яку можна малювати
Ерум

7
1.) Не забудьте закрити FileOutputStream. 2.) Не встановлюйте жорсткий код "/ sdcard /"; використовувати замість Environment.getExternalStorageDirectory (). getPath ()
linuxjava

41

Рішення, запропоноване від superM, працювало для мене довгий час, але нещодавно я протестував його на версії 4.2 (HTC One), і воно перестало там працювати. Я усвідомлюю, що це обхідний шлях, але він єдиний, який працював у мене з усіма пристроями та версіями.

Згідно з документацією, розробників просять "використовувати систему MediaStore" для надсилання двійкового вмісту. Однак це має (не) перевагу в тому, що мультимедійний вміст буде назавжди збережено на пристрої.

Якщо це варіант для вас, ви можете надати дозвіл WRITE_EXTERNAL_STORAGEі використовувати загальносистемний 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"));

3
Це єдине рішення, яке допомогло мені поділитися у Facebook! Дякую.
Моті Бартов

9
Це створює новий образ. Як видалити нове зображення?
BlueMango

2
@BlueMango ти знайшов рішення?
aks

Ідеальна відповідь! Працює в кожному додатку!
dianakarenms

26

Спочатку додайте дозвіл

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

за допомогою Bitmap з ресурсів

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

Перевірено через Bluetooth та інші месенджери


як надіслати зображення з url типу whats app і все
Харша

якщо ви хочете поділитися зображенням з URL-адреси в інший додаток. Вам потрібно завантажити зображення в Bitmap stackoverflow.com/questions/18210700/…, а потім використовувати спільний намір.
Hemant Shori

а потім після вкладеного зображення та поділився, як закрити цю програму та перейти до нашого додатка android
Харша

1
@ Харша ха-ха. FYI, ви не можете впоратися з цим, якщо хтось залишить вашу програму, десь як. він / вона повинен перейти до нещодавнього та відновити роботу вашого додатка. ніяк інакше. як ти можеш взяти під свій контроль чужу програму ?.
Hemant Shori


20

Я знайшов найпростіший спосіб зробити це, використовуючи MediaStore, щоб тимчасово зберігати зображення, яким ви хочете поділитися:

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

Від: Обмін вмістом із намірами


У canvasзмінній немає потреби , вона ніде не використовується.
Фернандо М. Пінейро

2
не забудьте додати помилку до manifest.xml: <koristi-дозвіл android: name = "android.permission.WRITE_EXTERNAL_STORAGE" />
Хамід,

13

Як поділитися зображенням в андроїд прогаматично, іноді ви хочете зробити знімок свого перегляду, а потім хочете поділитися ним, тому виконайте такі дії: 1. Додайте дозвіл до файлу mainfest

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

2. Дуже спочатку зробіть знімок екрана вашого перегляду, наприклад, це Imageview, Textview, Framelayout, LinearLayout тощо

Наприклад, у вас є перегляд зображення, щоб зробити знімок екрана, виклик цього методу в oncreate ()

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

після того, як зробили знімок скріншота, поділіться способом зображення, або натиснувши
кнопку, або де ви хочете

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

Після методу create визначте ці два методи ##

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

}

Що таке ".setFlags (Intent.FLAG_ACTIVITY_NEW_TASK);" використовується для наміру, який ви встановили вище?
AJW

12

Простий і найпростіший код, за допомогою якого ви можете ділитися зображеннями з галереї.

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

Простий і потужний, немає необхідності зберігати зображення чи що завгодно, всі наведені вище відповіді для мене не працювали, але це просте рішення робить трюк ... Щиро дякую .... До речі, я протестував цей код телефон з орео-версією андроїда
Parsania Hardik

10

Ось рішення, яке мені вдалося. Одне питання - вам потрібно зберігати зображення у спільному або приватному місці, яке не є додатком ( http://developer.android.com/guide/topics/data/data-storage.html#InternalCache )

Багато пропозицій говорять про зберігання в Apps "приватному" розташуванні кешу, але це, звичайно, недоступне через інші зовнішні програми, включаючи загальний намір Share File, який використовується. Коли ви спробуєте це, він запуститься, але, наприклад, dropbox скаже вам, що файл більше недоступний.

/ * КРОК 1 - Збережіть файл растрових зображень локально, використовуючи функцію збереження файлу нижче. * /

localAbsoluteFilePath = saveImageLocally(bitmapImage);

/ * КРОК 2 - Поділіться не приватним абсолютним шляхом до наміру спільного файлу * /

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

/ * ЗБЕРЕГТИ ФУНКЦІЮ ЗОБРАЖЕННЯ * /

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

/ * КРОК 3 - Обробка результату спільного використання файлу. Потрібно видалити тимчасовий файл тощо * /

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


    }   

Сподіваюся, це комусь допомагає.


1
ваше використання Log.d є зворотним. Це спочатку тег, а потім повідомлення.
over_optimistic

2
виправлено, я фактично не використовую log.d, у мене є функція обгортки. Я повинен зробити помилку, коли змінив приклад, щоб зробити відповідним для SO. Вітання
підключено00


8

Я втомився від пошуку різних варіантів спільного використання подання або зображення з моєї програми на іншу програму. І нарешті я отримав рішення.

Крок 1: Поділіться блоком обробки намірів. Це відкриє вікно зі списком програм у вашому телефоні

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


}

Крок 2: Перетворення вашого подання на 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;
}

Крок 3:

Щоб отримати URI із Bitmap Image

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

4

У мене просто була та сама проблема.
Ось відповідь, яка не використовує явного запису файлу у вашому основному коді (дозволяючи api подбати про це за вас).

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

Це шлях ... вам просто потрібно додати ідентифікатори зображень в об’єкт, що малюється. У моєму випадку (код вище), що малюється, було витягнуто з ImageView.


3

Відповідь SuperM спрацювала у мене, але з Uri.fromFile () замість Uri.parse ().

З Uri.parse () він працював лише з Whatsapp.

Це мій код:

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

Вихід Uri.parse ():
/storage/emulated/0/Android/data/application_package/Files/17072015_0927.jpg

Вихід Uri.fromFile:
file: ///storage/emulated/0/Android/data/application_package/Files/17072015_0927.jpg


3

спробуйте це,

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

3

посилання: - 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.."));

2

Ідеальним рішенням для спільного використання тексту та зображень через Intent є:

На кнопці спільного доступу натисніть:

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

Потім створіть метод shareBitmap (зображення).

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

}

А потім просто протестуйте .. !!


2

Усе вищезазначене рішення для мене не працює Android Api 26 & 27 (Oreo), було отримання Error: exposed beyond app through ClipData.Item.getUri. Рішення, яке відповідає моїй ситуації, було

  1. отримати шлях URI , використовуючи в FileProvider.getUriForFile(Context,packagename,File)якості
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. Визначте a <provider>у вашому Manifest.xmlяк
<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. І останній крок - це визначити resourceфайл для ваших директорів
<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`

2

Дякую всім, я спробував декілька запропонованих варіантів, але, схоже, вони не працюють для останніх версій Android, тому додаю змінені кроки, які працюють для останніх версій Android. вони засновані на декількох відповідях вище, але з модифікаціями та рішення засноване на використанні Провайдера файлів:

Крок 1

Додайте наступний код у файл маніфесту:

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

Крок: 2 Створіть XML-файл у розділі res> xml

Створіть файл file_provider_paths всередині xml.

Зверніть увагу, що це файл, який ми включили до ресурсу android: на попередньому кроці.

Напишіть такі коди всередину file_provider_paths:

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

Крок: 3

Після цього перейдіть до вашої кнопки Клацніть:

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

Для більш детального пояснення відвідайте https://droidlytics.wordpress.com/2020/08/04/use-fileprovider-to-share-image-from-recyclerview/


1

Застосовуючи жорсткіші політики безпеки, виставлення uri за межами програми викликає помилку та збій програми.

Відповідь @Ali Tamoor пояснює використання провайдерів файлів, це рекомендований спосіб.

Детальніше див. - https://developer.android.com/training/secure-file-sharing/setup-sharing

Також вам потрібно включити основну бібліотеку androidx до свого проекту.

implementation "androidx.core:core:1.2.0"

Звичайно, це трохи громіздка бібліотека, і вона потрібна лише для обміну файлами - якщо є кращий спосіб, будь ласка, дайте мені знати.


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

Привіт і ласкаво просимо до SO! Хоча цей код може відповісти на питання, надання додаткового контексту щодо того, як та / або чому він вирішує проблему, покращило б довгострокове значення відповіді. Будь ласка, прочитайте екскурсію та Як мені написати хорошу відповідь? Ви можете додати інформацію, чому така відповідь краща за інші відповіді на це запитання.
Томер Шетах
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.