#android #image #android-studio #save #public
#Android #изображение #android-studio #Сохранить #общедоступный
Вопрос:
Я пытаюсь сохранить изображение в общедоступном каталоге хранилища, используя приведенный ниже код. Однако, когда это сохраняется в хранилище / эмулируемое / 0, а не в общедоступную папку с изображениями. Я использовал в основном этот точный код в другом приложении, и он работал нормально. Кто-нибудь знает, почему .getExternalStoragePublic каталог не возвращает доступный /Pictures/ и вместо этого возвращает хранилище /emulated/0 ?
У меня есть «uses-permission android:name =»android.permission.WRITE_EXTERNAL_STORAGE» в моем файле манифеста
File backupFile;
File appFolder;
String path= Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath() "/CustomFolder";
appFolder = new File(path);
if (!appFolder.exists())
appFolder.mkdir();
String fileName = "picture.jpg"
backupFile = new File(appFolder, fileName);
FileOutputStream output = null;
try {
output = new FileOutputStream(backupFile);
output.write(bytes);
} catch (IOException e) {
e.printStackTrace();
} finally {
mImage.close();
if (null != output) {
try {
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Комментарии:
1.
appFolder.mkdir();
Проверьте возвращаемое значение, поскольку может не получиться создать каталог. Отобразите всплывающее окно, если оно возвращает false, и не продолжайте код, а возвращайте.2. Почему вы публикуете весь этот код, когда единственное, что вы хотите сказать, это то, что
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath()
папка отличается от ожидаемой. Или нет?3.
is not returning the accessible /Pictures/ and instead returning storage/emulated/0
. Он никогда не вернется/Pictures/
, но может вернуться/storage/emulated/0/Pictures
.
Ответ №1:
Неважно, я понял это. Оказывается, просто «использует-разрешение android: name =»android.permission.WRITE_EXTERNAL_STORAGE» в файле манифеста недостаточно, и мне пришлось поместить перед ним следующий код, чтобы заставить его работать:
int CAMERA_PERMISSION_REQUEST_CODE = 2;
int result = ContextCompat.checkSelfPermission(getActivity().getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (result != PackageManager.PERMISSION_GRANTED){
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE)){
Toast.makeText(getActivity().getApplicationContext(), "External Storage permission needed. Please allow in App Settings for additional functionality.", Toast.LENGTH_LONG).show();
} else {
ActivityCompat.requestPermissions(getActivity(),new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},CAMERA_PERMISSION_REQUEST_CODE);
}
}
Комментарии:
1. Если это была проблема, то вы дезинформировали нас, сказав, что изображение было записано. Только в другом месте.