在android N平臺,進行文件分享時,需要改變數(shù)據(jù)的傳輸格式,否則會出現(xiàn)分享失敗等情況亦渗。
android N上,文件的傳輸數(shù)據(jù)格式用"content://"取代了M上的"file://" 汁尺,這一點尤其要注意法精。
在網(wǎng)上,有不少文章用FileProvider類的getUriForFile方法痴突,通過傳入filePath搂蜓,來構(gòu)造一個Uri對象,然后傳入Intent 辽装,但在實際使用中帮碰,分享到微信、藍牙拾积、短信等殉挽,部分文件格式會有問題,如文本文件拓巧,壓縮包文件等斯碌,這種方法缺陷較多,如下方式會更好:
通過絕對路徑玲销,獲取對應(yīng)的Uri(加上對應(yīng)的權(quán)限) :
privateUri getPathUri(String path,Activity mContext) {
Uri fileUri =null;
Uri baseUri = MediaStore.Files.getContentUri("external");
Cursor cursor = mContext.managedQuery(baseUri,null,null,null,null);
cursor.moveToFirst();
while(!cursor.isAfterLast()){
String data = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DATA));
if(path.equals(data)){
intid = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
fileUri = Uri.withAppendedPath(baseUri,id+"");
break;
}
cursor.moveToNext();
}
returnfileUri;
}
將Uri傳入到Intent中:
Intent intent =newIntent();
intent.setAction(Intent.ACTION_SEND);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setType("text/plain");//這里請注意输拇,寫對應(yīng)文件的minetype
intent.putExtra(Intent.EXTRA_STREAM,getPathUri(path ,activity));
上面的文件主要指文本文件,zip文件等等贤斜。如果是圖片策吠、音頻、視頻瘩绒,則需要改動baseUri 猴抹,主要目的是減小返回cursor集合,減少遍歷次數(shù) 锁荔;
圖片需要將baseUri改為:
Uri baseUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
視頻文件需要將baseUri改為:
Uri baseUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
音頻文件將baseUri改為:
Uri baseUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;