android n 打开文件夹,Android N 文件分享注意事项

在android N平台,进行文件分享时,需要改变数据的传输格式,否则会出现分享失败等情况。

android N上,文件的传输数据格式用"content://"取代了M上的"file://" ,这一点尤其要注意。

在网上,有不少文章用FileProvider类的getUriForFile方法,通过传入filePath,来构造一个Uri对象,然后传入Intent ,但在实际使用中,分享到微信、蓝牙、短信等,部分文件格式会有问题,如文本文件,压缩包文件等,这种方法缺陷较多,如下方式会更好:

通过绝对路径,获取对应的Uri(加上对应的权限) :

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");//这里请注意,写对应文件的minetype

intent.putExtra(Intent.EXTRA_STREAM,getPathUri(path ,activity));

上面的文件主要指文本文件,zip文件等等。如果是图片、音频、视频,则需要改动baseUri ,主要目的是减小返回cursor集合,减少遍历次数 ;

图片需要将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;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值