今天在做一個(gè)通過(guò)Intent把文件分享到微信的功能咳胃,遇到微信一直返回“獲取資源失敗”的問(wèn)題植康。
代碼如下:
Intent intent = new Intent();
//設(shè)置intent的Action屬性
intent.setAction(Intent.ACTION_SEND);
// 授權(quán)讀權(quán)限
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
//設(shè)置intent的data和Type屬性。
intent.setDataAndType(uri, type);
activity.startActivity(intent);
原因有幾個(gè)
1.你需要獲取都存儲(chǔ)權(quán)限
2.你需要通過(guò) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 授權(quán)外部應(yīng)用臨時(shí)權(quán)限
3.你需要加上這一句
intent.putExtra(Intent.EXTRA_STREAM, uri); // 必須添加這一句展懈,否則找不到資源
后來(lái)在注釋中發(fā)現(xiàn)這么一句話销睁,大概意思是為了兼容舊應(yīng)用你需要使用 ACTION_SEND 必須加上 EXTRA_TEXT 或者 EXTRA_STREAM 這兩個(gè)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)}.
在這卡了好久供璧,記錄一下吧