Java 通过ACTION_SEND共享当前视图,无需将图像存储在android中

Java 通过ACTION_SEND共享当前视图,无需将图像存储在android中,java,android,share,android-permissions,android-sharing,Java,Android,Share,Android Permissions,Android Sharing,我想使用ACTION_SEND共享应用程序的当前视图 将当前视图转换为位图并将其存储在外部存储器中以将位图转换为可解析Uri的方法需要权限 片段: public static Bitmap getScreenShot(View view) { View screenView = view.getRootView(); screenView.setDrawingCacheEnabled(true); Bitmap bitmap = Bitma

我想使用ACTION_SEND共享应用程序的当前视图

将当前视图转换为位图并将其存储在外部存储器中以将位图转换为可解析Uri的方法需要权限

片段:

    public static Bitmap getScreenShot(View view) {
        View screenView = view.getRootView();
        screenView.setDrawingCacheEnabled(true);
        Bitmap bitmap = Bitmap.createBitmap(screenView.getDrawingCache());
        screenView.setDrawingCacheEnabled(false);
        return bitmap;
    }

    // View to BitMap
    Bitmap b  = getScreenShot(getWindow().getDecorView().findViewById(android.R.id.content));

    //BitMap to Parsable Uri (needs write permissions)
    String pathofBmp = MediaStore.Images.Media.insertImage(getContentResolver(), b,"title", null);
    Uri bmpUri = Uri.parse(pathofBmp);

    //Share the image
    Intent shareIntent = new Intent();
    shareIntent.setAction(Intent.ACTION_SEND);
    shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
    shareIntent.setType("image/jpeg");
    shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    startActivity(Intent.createChooser(shareIntent, "send"));
这需要写入外部存储权限,
有没有办法在Android上执行相同的操作而不将其存储在外部存储器(无权限)中?

如果您的
minSdkVersion
为19或更高版本,您可以使用
getExternalFilesDir()
将图像写入外部存储器并避免权限问题

您可以将文件写入内部存储器(例如,
getCacheDir()
),然后使用
FileProvider
共享它。您仍然需要使用
FileProvider
或一些
ContentProvider
,如下所示


如果要避免磁盘I/O。。。您必须将
位图
压缩为
ByteArrayOutputStream
,然后编写自己的
内容提供者
,以从该
字节[]提供服务。这有点冒险,因为如果你的进程在另一个应用程序尝试使用
Uri
之前终止,那么你就倒霉了,因为你的位图不见了。

有没有其他方法(除了查看->位图->存储/内容提供商)来转换应用程序中的当前视图并与其他应用程序共享?@Rishi:没有。您可以使用Android 5.0+上的媒体投影API进行屏幕截图部分。感谢您对我所有问题的回答,我在使用fileProvider共享内存中图像时遇到问题,权限总是由接收应用程序询问的,您可以发表意见吗?