今天在做一个通过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)}.
在这卡了好久,记录一下吧
网友评论