Android7.0共有モーメンツFileProviderで生成されたUriが認識されない

1974 ワード

最近共有機能を作っていて、直接呼び出したのはシステムの共有で、実際にAndroid 6でテストしました.0以降のバージョンでは、正常にテストできます.私たちは知っていますandroid 7.0では、Uriを通過できません.fromFile(file);直接Uriを取得し、代わりにFileProviderを通じてファイルを取得するUriは、
imageUri = FileProvider.getUriForFile(mContext,  .fileProvider",new File(imgCache.get(i) ));

すべてが素晴らしいと思っていますが、共有を呼び出すと、「リソースの取得に失敗しました.共有ピクチャのみをサポートします」とヒントが表示されます.リソースの取得に失敗した以上、どこでリソースが取得されていないのかをデバッグしてみましょう.結果、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)));に変えて、ここで微信のモーメンツのページを調整することに成功しました.