GetRealPath для изображения Android10 - PullRequest
0 голосов
/ 22 марта 2020

Я пытаюсь получить реальный путь для выбранного изображения в Android 10, но он не работает. Iam, используя следующий код, прекрасно работает в android 9

public static String getRealPathFromURI(Context context, Android.Net.Uri contentUri)
        {
            ICursor cursor = context.ContentResolver.Query(contentUri, null, null, null, null);
            cursor.MoveToFirst();
            String document_id = cursor.GetString(0);
            document_id = document_id.Substring(document_id.LastIndexOf(":") + 1);
            cursor.Close();

            cursor = context.ContentResolver.Query(
            Android.Provider.MediaStore.Images.Media.ExternalContentUri,
            null, MediaStore.Images.Media.InterfaceConsts.Id + " = ? ", new string[] { document_id }, null);
            cursor.MoveToFirst();
            String path = cursor.GetString(cursor.GetColumnIndex(MediaStore.Images.Media.InterfaceConsts.Data));

             cursor.Close();
            return path;
        }

1 Ответ

0 голосов
/ 23 марта 2020

Option1

После SDK 29.0 DATA устарела. Приложения могут не иметь разрешений файловой системы для прямого доступа к этому пути. Вместо того, чтобы пытаться открыть этот путь напрямую, приложения должны использовать ContentResolver#openFileDescriptor(Uri, String) для получения доступа.

Вот похожая нить , к которой вы можете обратиться.

Вариант 2

Вы можете установить плагин Xam.Plugin.Media из nuget.

Использование

await CrossMedia.Current.Initialize();

if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
{
     return;
}

var file = await CrossMedia.Current.PickPhotoAsync();

if (file == null)
     return;

var path = file.Path;

Более подробную информацию о плагине вы можете проверить https://github.com/jamesmontemagno/MediaPlugin

...