Android通过Intent分享文件到外部应用时找不到资源

今天在做一个通过Intent把文件分享到微信的功能,遇到微信一直返回“获取资源失败”的问题。
代码如下:

Intent intent = new Intent();
//设置intent的Action属性
intent.setAction(Intent.ACTION_SEND);
// 授权读权限
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
 //设置intent的data和Type属性。
intent.setDataAndType(uri, type);
activity.startActivity(intent);

原因有几个
1.你需要获取都存储权限
2.你需要通过 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 授权外部应用临时权限
3.你需要加上这一句

intent.putExtra(Intent.EXTRA_STREAM, uri); // 必须添加这一句,否则找不到资源

后来在注释中发现这么一句话,大概意思是为了兼容旧应用你需要使用 ACTION_SEND 必须加上 EXTRA_TEXT 或者 EXTRA_STREAM 这两个FLAG

     * As of {@link android.os.Build.VERSION_CODES#JELLY_BEAN}, the data
     * being sent can be supplied through {@link #setClipData(ClipData)}.  This
     * allows you to use {@link #FLAG_GRANT_READ_URI_PERMISSION} when sharing
     * content: URIs and other advanced features of {@link ClipData}.  If
     * using this approach, you still must supply the same data through the
     * {@link #EXTRA_TEXT} or {@link #EXTRA_STREAM} fields described below
     * for compatibility with old applications.  If you don't set a ClipData,
     * it will be copied there for you when calling {@link Context#startActivity(Intent)}.

在这卡了好久,记录一下吧

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容