美文网首页
Android N 文件分享注意事项

Android N 文件分享注意事项

作者: tiger桂 | 来源:发表于2017-04-27 16:52 被阅读0次

    在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;

    相关文章

      网友评论

          本文标题:Android N 文件分享注意事项

          本文链接:https://www.haomeiwen.com/subject/btknzttx.html