Android7.0分享朋友圈FileProvider生成的Uri无法被识别

最近在做一个分享功能,直接调用的是系统的分享,实际测试在Android6.0及以下版本,都是可以测试正常的。我们都知道,在android7.0中,无法通过Uri.fromFile(file);直接来获取Uri,替换他的是通过FileProvider,通过下面这种方式来获取文件的Uri,

imageUri = FileProvider.getUriForFile(mContext, 包名.fileProvider",new File(imgCache.get(i) ));

一切想的很美好,但是运行调用分享的时候,提示:“获取资源失败,仅支持分享图片”,
既然是获取资源失败,那就debug一下看看是哪里没有获取到资源,结果Uri是能正常获取到的,所有并不是资源的问题,那么就从文件类型检查一下,发现我设置的intent的type也是图片类型的。如:
shareIntent.setType("image/jpeg");,
一切都正常,但是为什么会有这样的提示,百般无奈只能上谷歌,一查,原来有些应用对于FileProvider生成的Uri无法识别,需要转化成MediaStore 的 content://。

public static Uri getImageContentUri(Context context, File imageFile) {
        String filePath = imageFile.getAbsolutePath();
        Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                new String[] { MediaStore.Images.Media._ID }, MediaStore.Images.Media.DATA + "=? ",
                new String[] { filePath }, null);
        Uri uri = null;

        if (cursor != null) {
            if (cursor.moveToFirst()) {
                int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
                Uri baseUri = Uri.parse("content://media/external/images/media");
                uri = Uri.withAppendedPath(baseUri, "" + id);
            }

            cursor.close();
        }

        if (uri == null) {
            ContentValues values = new ContentValues();
            values.put(MediaStore.Images.Media.DATA, filePath);
            uri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
        }

        return uri;
    }

将上面获取到的imageUri再一次进行转化, 把他变成系统可以识别的Uri
imageUri = ImgFileUtils.getImageContentUri(mContext, new File(imgCache.get(i)));
到这里就能成功调起微信朋友圈的页面了

你可能感兴趣的:(Android7.0分享朋友圈FileProvider生成的Uri无法被识别)