我想使用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"));
这需要 WRITE_EXTERNAL_STORAGE 权限, 有没有办法在不将其存储在Android上的外部存储(没有权限)的情况下执行相同的操作?
答案 0 :(得分:2)
如果minSdkVersion
为19或更高,则可以使用getExternalFilesDir()
将图像写入外部存储空间并避免权限问题。
您可以将文件写入内部存储空间(例如getCacheDir()
),然后使用FileProvider
进行共享。无论如何,您需要使用FileProvider
或某些ContentProvider
作为Android 7.0+ does not like the file
scheme。
如果您想避免磁盘I / O ......您必须将Bitmap
压缩为ByteArrayOutputStream
,然后编写自己的ContentProvider
以便从byte[]
进行投放1}}。这有点冒险,因为如果您的流程在其他应用程序尝试使用Uri
之前终止,那么您运气不好,因为您的位图已经消失。