Я использую React Native на основе Expo (сейчас SDK v50) и при запуске моего кода в симуляторе все работает нормально. Но если я запущу его на своем телефоне, у меня возникнут две проблемы.
Это фрагмент кода для предоставления разрешений и получения всех видео- и фоторесурсов из медиатеки:
Код: Выделить всё
const { status } = await MediaLibrary.requestPermissionsAsync();
if (status !== 'granted') {
console.warn('Permission not granted for Media Library');
return;
}
const media: MediaLibrary.PagedInfo = await MediaLibrary.getAssetsAsync({
mediaType: [MediaType.photo, MediaType.video],
first: 100,
after: pageInfo?.endCursor || undefined,
});
const mediaItemsWithFileUris = await Promise.all(
media.assets.map(async (asset: Asset) => {
const assetDetails: AssetInfo = await MediaLibrary.getAssetInfoAsync(asset.id);
return {
id: asset.id,
uri: asset.uri,
width: asset.width,
height: asset.height,
filename: asset.filename,
filepath: assetDetails.localUri,
duration: asset.duration,
mediaType: asset.mediaType,
syncStatus: SyncStatus.TO_BE_SYNCED,
};
})
);
В рабочей версии MediaLibrary.getAssetsAsync возвращает только видео. Никакие объекты типа фото не возвращаются. В симуляторе он работает нормально и возвращает и то, и другое.
2. Проблема:
При использовании пути к файлу, также известного как localUri ресурсов, видео не отображаются. Также не возникает ошибок или исключений. В Simulator он работает и отображает как фотографии, так и видео в зависимости от пути к файлу. Синтаксис обоих выглядит следующим образом:
2.1 Путь к файлу симулятора: file:///Users//Library/Developer/CoreSimulator/Devices/2FC116CE-6C2E- 48FB-882C-A5C0E0E5A239/data/Media/DCIM/100APPLE/IMG_0009.MP4
2.2 Путь к файлу производственного режима:
file:///var/mobile/Media/DCIM/106APPLE/IMG_6171.MP4
Может ли это быть проблема, связанная с разрешениями?
К сожалению, я не нашел достоверной информации о том, чем различаются разрешения режимов «Симулятор» и «Производство». Я бы ожидал, что он также будет зарегистрирован, если бы возникли проблемы.
Нужно ли мне использовать другой URI вместо протокола file://?
Я попробовал это с URI ph://, специфичным для iOS, но все равно не сработало.
Подробнее здесь: https://stackoverflow.com/questions/793 ... -simulator