我怎样才能通过意图共享多个文件?

这是我的代码,但这是一个单一的文件解决scheme。

我可以像我为单个文件一样共享多个文件并上传吗?

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.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或更低,或者你可以使用FileProvider的内容URI 。

这里是MCeley的解决scheme简单改进的版本。 这可以用来发送异构文件列表(如图像,文档和video同时),例如同时上传下载的文档,图像。

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