Как я могу делиться несколькими файлами через Intent?

Вот мой код, но это решение для одного файла.

Могу ли я поделиться несколькими файлами и загрузками, как я делаю для отдельных файлов ниже?

Button btn = (Button)findViewById(R.id.hello); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_SEND); String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/pic.png"; File file = new File(path); MimeTypeMap type = MimeTypeMap.getSingleton(); intent.setType(type.getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(path))); intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file)); intent.putExtra(Intent.EXTRA_TEXT, "1111"); startActivity(intent); } }); 

Solutions Collecting From Web of "Как я могу делиться несколькими файлами через Intent?"

Да, но вам нужно использовать Intent.ACTION_SEND_MULTIPLE вместо Intent.ACTION_SEND .

 Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND_MULTIPLE); intent.putExtra(Intent.EXTRA_SUBJECT, "Here are some files."); intent.setType("image/jpeg"); /* This example is sharing jpeg images. */ ArrayList<Uri> files = new ArrayList<Uri>(); for(String path : filesToSend /* List of the files you want to send */) { File file = new File(path); Uri uri = Uri.fromFile(file); files.add(uri); } intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, files); startActivity(intent); 

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

ОБНОВЛЕНИЕ : Начиная с API 24, общие URI-файлы файлов будут вызывать исключение FileUriExposedException. Чтобы исправить это, вы можете либо переключить свой compileSdkVersion на 23, либо ниже, или вы можете использовать URI контента с помощью FileProvider .

Вот небольшая улучшенная версия, импровизированная решением MCeley. Это можно использовать для отправки гетерогенного списка файлов (например, изображения, документа и видео в одно и то же время), например, одновременно загружать загруженные документы, изображения.

 public static void shareMultiple(List<File> files, Context context){ ArrayList<Uri> uris = new ArrayList<>(); for(File file: files){ uris.add(Uri.fromFile(file)); } final Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE); intent.setType("*/*"); intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); context.startActivity(Intent.createChooser(intent, context.getString(R.string.ids_msg_share))); } 
 /* manifest file outside the applicationTag write these permissions <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> */ File pictures = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); //Get a top-level public external storage directory for placing files of a particular type. // This is where the user will typically place and manage their own files, // so you should be careful about what you put here to ensure you don't // erase their files or get in the way of their own organization... // pulled from Standard directory in which to place pictures that are available to the user to the File object String[] listOfPictures = pictures.list(); //Returns an array of strings with the file names in the directory represented by this file. The result is null if this file is not a directory. Uri uri=null; ArrayList<Uri> arrayList = new ArrayList<>(); if (listOfPictures!=null) { for (String name : listOfPictures) { uri = Uri.parse("file://" + pictures.toString() + "/" + name ); arrayList.add(uri); } Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND_MULTIPLE); intent.putExtra(Intent.EXTRA_STREAM, arrayList); //A content: URI holding a stream of data associated with the Intent, used with ACTION_SEND to supply the data being sent. intent.setType("image/*"); //any kind of images can support. chooser = Intent.createChooser(intent, "Send Multiple Images");//choosers title startActivity(chooser); }