看了网上说的很多,甚至有分享代码,流程也都差不多,但是根本不知道有什么坑在等你,网上说要在加androidMainFast加权限,什么通过file和imagePath获取uri等等,搞了好久都行不通,主要的坑就是说 怎么获取本地Assets下的图片资源的uri,谁都知道要获取这个uri,可是怎么获取呢?下面是我的实现方案,如果你看到了这篇文章,希望能解决大家的问题。
通过Glide安卓图片框架,Glide.with方法加载图片,异步加载成功的回调里onResourceReady,得到图片的二进制流,通过
MediaStore.Images.Media.insertImage(context.getContentResolver(), resource, null,null)这个方法,把二进制流转换成其他app可识别的uri
剩下的就简单了,直接上代码
Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addCategory("android.intent.category.DEFAULT"); intent.putExtra(Intent.EXTRA_STREAM, uri); String fileType = "image/*"; intent.setDataAndType(uri, fileType); try { context.startActivity(Intent.createChooser(intent, "分享")); } catch (Exception e) { e.printStackTrace(); }
================ 下面是夹在本地图片,获取二进制 和原生分享图片的的代码 final SimpleTarget<Bitmap> simpleTarget = new SimpleTarget<Bitmap>() { @Override public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { WXImageObject imageObject = new WXImageObject(resource); Uri uri = Uri.parse(MediaStore.Images.Media.insertImage(context.getContentResolver(), resource, null,null)); //此处已经得到了uri,直接写分享逻辑就可以了 } @Override public void onLoadFailed(Exception e, Drawable errorDrawable) { super.onLoadFailed(e, errorDrawable); } }; Glide.with(context) .load(realPath) // 这里的realPath就是本地的图片路径"assets/**/**/**" .asBitmap() .placeholder(iconId) .diskCacheStrategy(DiskCacheStrategy.NONE) .error(iconId) .into(simpleTarget);