Прежде всего, я тестирую это приложение с помощью своего Google Pixel XL (версия 1-го поколения, 32 ГБ, работает под управлением Android 9 API уровня 28).
По сути, я пытаюсь создать приложение для камеры на основе Android Camera 2 API (я только что скачал пример кода с https://github.com/googlesamples/android-Camera2Basic). и я застрял, потому что я пытаюсь сохранить снимок, сделанный камерой, в папку "Pictures" внутри " /storage/emulated/0/
".
Однако, по какой-то причине, хотя мне кажется, что я могу это сделать, папка и файл изображения отсутствуют, когда я проверил их с помощью ES File Explorer.
Я попробовал 3 метода до сих пор:
Попытка № 1:
mFile = new File(getActivity().getExternalFilesDir(Environment.DIRECTORY_PICTURES), "newPicture.jpg");
if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
mFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "picture.jpg");
mFile.mkdirs();
}
Попытка № 2:
File filePath = new File(Environment.getExternalStorageDirectory().getPath(),"randomFolder");
if(!filePath.exists()){
filePath.mkdirs();
}
String fullPathName = filePath.getAbsolutePath() + "/" + "newPicture.jpg";
mFile = new File(fullPathName);
Попытка № 3:
mFile = new File(fullPathName);
File filePath = new File(Environment.getExternalStorageDirectory() + "/Pictures/");
if (!filePath.exists()){
filePath.mkdirs();
}
mFile = new File(filePath,"newPicture.jpg");
mFile - это путь к файлу, в который будет сохраняться "newPicture", в основном он должен быть сохранен в "/storage/emulated/0/Pictures/newPicture.jpg"
Теперь я попытался использовать метод getExternalFilesDir(), чтобы изображение было сохранено в /storage/emulated/0/Android/data/com.***.***[the package name]/files/Pictures/newPicture.jpg
", и в этом случае ЭТО ПОЛНОСТЬЮ РАБОТАЕТ! Однако я ДЕЙСТВИТЕЛЬНО хочу сохранить изображение в каталоге /storage/emulated/0
потому что я хочу, чтобы пользователь впоследствии мог легко получить доступ к данным.
Чтобы лучше это проиллюстрировать, я записал запущенное приложение, а затем сделал снимок и сохранил его в формате gif, загрузив его на imgur прямо здесь: https://imgur.com/Szpc1HR
Видеть, что? Кажется, что изображение успешно сохранено в "/storage/emulated/0/Pictures/newPicture.jpg", но затем, когда я зашел в ES File Explorer, чтобы проверить изображение, папка "Pictures" не была создана, нада.
Я буквально нахожусь в своем уме, ха-ха, кто-нибудь знает решение этой проблемы? Любые советы будут с благодарностью
PS Почти забыл сказать, я уже добавил разрешение в AndroidManifest.xml
:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
Как кто-то сказал в этом посте:
how-can-i-access-storage-emulated-0-dcim-on-android-device, папка "/storage/emulated/" в действительности не существует. Это то, что можно назвать "символической ссылкой" или, проще говоря, ссылкой на место хранения реальных данных. Вам нужно будет найти фактическое физическое местоположение на вашем устройстве, где оно хранится.
Может быть, эта ссылка поможет, или Это не может создать каталог в /storage/emulated/0 на эмуляторе.
/storage/emulated/0/Android/data/com.***.***[the package name]/files/Pictures/newPicture.jpg
"верно? Ну, тост покажет, что он там сохранен, и когда я проверяю его с помощью ES File explorer,newPicture.jpg
был создан "newPicture.jpg
".newPicture.jpg
том, я думаю, что тост показывает правильные вещи, просто по какой-то причине он там не сохранен ,