如何以编程方式在android中共享文件

时间:2014-04-12 06:07:36

标签: android share

我想使用共享Intent共享文件(.pdf,.apk等),我搜索谷歌但我只找到共享图像的代码

Intent sharingIntent = new Intent(Intent.ACTION_SEND);
Uri screenshotUri = Uri.parse(path);
sharingIntent.setType("image/png");
sharingIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri);
startActivity(Intent.createChooser(sharingIntent, "Share image using"));

请帮助解决这个问题

5 个答案:

答案 0 :(得分:16)

您使用相同的代码,只需更改要共享的数据类型的MIME类型即可。如果您希望分享任何类型的内容,请使用*/*

答案 1 :(得分:1)

为使代码实用,请使用ShareCompat类:

ShareCompat.IntentBuilder.from(this)
        .setStream(uri)
        .setType(URLConnection.guessContentTypeFromName(file.getName()))
        .startChooser();

答案 2 :(得分:0)

对于sdk 24及更高版本,如果您需要在应用存储之外获取文件的Uri,则会出现此错误。

android.os.FileUriExposedException: file:///storage/emulated/0/MyApp/Camera_20180105_172234.jpg exposed beyond app through ClipData.Item.getUri()

要解决此问题:exposed beyond app through ClipData.Item.getUri

答案 3 :(得分:0)

这将为您提供帮助

Intent sharingIntent = new Intent(Intent.ACTION_SEND);
Uri screenshotUri = Uri.parse(path);
sharingIntent.setType("*/*");
sharingIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri);
startActivity(Intent.createChooser(sharingIntent, "Share using"));

答案 4 :(得分:0)

public void ShareFile(String path)
{
    Intent shareToneIntent=new Intent(Intent.ACTION_SEND);
    shareToneIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(path));
    shareToneIntent.setType(GetMimeType(Uri.parse(path)));
    requireContext().startActivity(shareToneIntent);
}

public String GetMimeType(Uri uri) {
    String mimeType = null;

    if (ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) {
        mimeType = requireContext().getContentResolver().getType(uri);
    } else {
        String fileExtension = MimeTypeMap.getFileExtensionFromUrl(uri.toString());
        mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension.toLowerCase());
    }
    return mimeType;
}