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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_35540562/article/details/102742472

今天在做一个通过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)}.

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

猜你喜欢

转载自blog.csdn.net/qq_35540562/article/details/102742472
今日推荐