Android7.0共有モーメンツFileProviderで生成されたUriが認識されない
1974 ワード
最近共有機能を作っていて、直接呼び出したのはシステムの共有で、実際にAndroid 6でテストしました.0以降のバージョンでは、正常にテストできます.私たちは知っていますandroid 7.0では、Uriを通過できません.fromFile(file);直接Uriを取得し、代わりにFileProviderを通じてファイルを取得するUriは、
すべてが素晴らしいと思っていますが、共有を呼び出すと、「リソースの取得に失敗しました.共有ピクチャのみをサポートします」とヒントが表示されます.リソースの取得に失敗した以上、どこでリソースが取得されていないのかをデバッグしてみましょう.結果、Uriは正常に取得できます.すべてはリソースの問題ではありません.ファイルタイプからチェックしてみると、私が設定したintentのtypeもピクチャタイプであることがわかります.
上で取得したimageUriをもう一度変換して、彼をシステムで認識できる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)));
に変えて、ここで微信のモーメンツのページを調整することに成功しました.