Ответ 1
Это похоже на то, что у вас нет каталога /sdcard/DCIM/Camera в некоторых версиях Android. Создание этого каталога (и с разрешения) решило проблему для меня.
У меня есть код, в котором я запускаю метод MediaStore.Images.Media.insertImage(вставляя его из источника, а не из имени файла). Этот код сохраняет изображение в MediaStore и возвращает uri изображения. Я знаю, что когда он не по какой-либо причине, он возвращает null вместо uri. Это изображение было загружено несколько раз многими людьми, и каждый раз он некоторое время возвращает null из этого метода. Я никогда этого не случалось со мной, поэтому я понятия не имею, что происходит. Каковы причины, по которым это может произойти? Существует еще одна почта с той же проблемой, но ответ является ссылкой на исходный код для MediaStore, но эта ссылка относится к странице, в которой ссылка недоступна. Любая помощь будет оценена по достоинству. Спасибо.
После удаления моей SD-карты я получил эту ошибку, поэтому я знаю, что это может быть причиной, я не уверен, но я чувствую, что это также произойдет, если карта будет заполнена. Все еще просто интересно, может ли быть и другая причина.
Это похоже на то, что у вас нет каталога /sdcard/DCIM/Camera в некоторых версиях Android. Создание этого каталога (и с разрешения) решило проблему для меня.
MediaStore.Images.Media.insertImage фактически обращается к внешнему хранилищу, чтобы сохранить изображение.
Некоторые важные напоминания, которые могут привести к сбою вашего приложения:
USB-соединение будет блокировать использование SD-карты в режиме Mass Storage.
Могут быть другие факторы, которые могут привести к недоступности SD-карты, поэтому убедитесь, что вы сначала можете получить доступ к SD-карте с помощью браузера файлов.
Убедитесь, что ваши разрешения правильно настроены с помощью android.permission.WRITE_EXTERNAL_STORAGE
Проводя это здесь для полноты, поскольку я получал null от insertImage, и причина была 1.
Я столкнулся с этой проблемой, когда я запускал тесты на эмуляторе со свежим sdcard-изображением. Я смог решить проблему, создав /sdcard/Pictures
с помощью
new File("/sdcard/Pictures").mkdirs();
Когда у меня возникла такая проблема, я исправил ее с добавлением разрешений:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.read_external_storage" />
Я выполнял MediaStore.Images.Media.insertImage
, прежде чем получить разрешение пользователя WRITE_EXTERNAL_STORAGE и READ_EXTERNAL_STORAGE, которое вызывает нулевой путь
Поэтому убедитесь, что пользователь разрешил разрешение, а затем сохранил изображение