Как поделиться местной фотографией, используя React Expo Sharing.shareAsyn c? - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь поделиться локальным файлом в React Expo, используя Sharing.shareAsync(). Извлеченная информация о фотографии с использованием MediaLibrary.getAssetInfoAsync() (на Android):

"filename": "IMG_20200414_190459.jpg",
  "height": 2074,
  "id": "896",
  "localUri": "file:///storage/emulated/0/DCIM/Camera/IMG_20200414_190459.jpg",
  "location": null,
  "mediaType": "photo",
  "modificationTime": 1586905500000,
  "uri": "file:///storage/emulated/0/DCIM/Camera/IMG_20200414_190459.jpg",
  "width": 4608,

Вызов Sharing.shareAsync(photo.localUri, {mimeType: 'image/jpeg'} Я получаю ошибку Failed to share the file: Failed to find configured root that contains /storage/emulated/0/DCIM/Camera/IMG_20200414_190459.jpg. Поэтому я попытался удалить одну из косых черт после file: и получить ошибку Not allowed to read file under given URL.

Приложение имеет разрешения CAMERA_ROLL и CAMERA и приложение. json включает в себя:

"android": {
      "permissions": [
        "CAMERA",
        "CAMERA_ROLL",
        "READ_EXTERNAL_STORAGE",
        "WRITE_EXTERNAL_STORAGE"
      ]
    }

Экспо-документы говорят, что я должен иметь возможность поделиться локальным файлом. Не уверен, что я делаю неправильно или что попробовать дальше. ТИА.

1 Ответ

1 голос
/ 16 апреля 2020

Похоже, что это может быть ошибкой в ​​Sharing API. Вы можете обойти это сейчас, скопировав файл в папку с документами, а затем предоставив к нему общий доступ. Вот пример: https://snack.expo.io/@notbrent / share-media-library-photo

Соответствующий код из этого примера ниже:

// Placeholder for getting asset from MediaLibrary
let results = await MediaLibrary.getAssetsAsync({ first: 1 });
let asset = results.assets[0];

// Use FileSystem to copy the image from its original location to the app document directory
let assetUriParts = asset.uri.split("/");
let assetName = assetUriParts[assetUriParts.length - 1];
let uri = `${FileSystem.documentDirectory}/${assetName}`;
await FileSystem.copyAsync({
  from: asset.uri,
  to: uri,
});

// Share the image from the uri that you copied it to
Sharing.shareAsync(uri);
...