Почему Images.Media.insertImage возвращает null

У меня есть код, в котором я запускаю метод MediaStore.Images.Media.insertImage(вставляя его из источника, а не из имени файла). Этот код сохраняет изображение в MediaStore и возвращает uri изображения. Я знаю, что когда он не по какой-либо причине, он возвращает null вместо uri. Это изображение было загружено несколько раз многими людьми, и каждый раз он некоторое время возвращает null из этого метода. Я никогда этого не случалось со мной, поэтому я понятия не имею, что происходит. Каковы причины, по которым это может произойти? Существует еще одна почта с той же проблемой, но ответ является ссылкой на исходный код для MediaStore, но эта ссылка относится к странице, в которой ссылка недоступна. Любая помощь будет оценена по достоинству. Спасибо.

После удаления моей SD-карты я получил эту ошибку, поэтому я знаю, что это может быть причиной, я не уверен, но я чувствую, что это также произойдет, если карта будет заполнена. Все еще просто интересно, может ли быть и другая причина.

Ответы

Ответ 1

Это похоже на то, что у вас нет каталога /sdcard/DCIM/Camera в некоторых версиях Android. Создание этого каталога (и с разрешения) решило проблему для меня.

Ответ 2

MediaStore.Images.Media.insertImage фактически обращается к внешнему хранилищу, чтобы сохранить изображение.

Некоторые важные напоминания, которые могут привести к сбою вашего приложения:

  • USB-соединение будет блокировать использование SD-карты в режиме Mass Storage.

  • Могут быть другие факторы, которые могут привести к недоступности SD-карты, поэтому убедитесь, что вы сначала можете получить доступ к SD-карте с помощью браузера файлов.

  • Убедитесь, что ваши разрешения правильно настроены с помощью android.permission.WRITE_EXTERNAL_STORAGE

Проводя это здесь для полноты, поскольку я получал null от insertImage, и причина была 1.

Ответ 3

Я столкнулся с этой проблемой, когда я запускал тесты на эмуляторе со свежим sdcard-изображением. Я смог решить проблему, создав /sdcard/Pictures с помощью

new File("/sdcard/Pictures").mkdirs();

Ответ 4

Когда у меня возникла такая проблема, я исправил ее с добавлением разрешений:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.read_external_storage" />

Ответ 5

Я выполнял MediaStore.Images.Media.insertImage, прежде чем получить разрешение пользователя WRITE_EXTERNAL_STORAGE и READ_EXTERNAL_STORAGE, которое вызывает нулевой путь

Поэтому убедитесь, что пользователь разрешил разрешение, а затем сохранил изображение