#java #android #android-studio
#ява #Android #android-studio #java
Вопрос:
я хочу создать файл для сохранения изображения в формате jpg
public static File createImageFile() throws IOException {
final String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
Locale.getDefault()).format(new Date());
final String imageFileName = "IMG_" timestamp;
File storageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), IMAGE_DIRECTORY_NAME);
storageDir.mkdirs();
return File.createTempFile(imageFileName, ".jpg", storageDir);
}
выше приведена моя функция для создания файла, расположенная в классе с именем FileHelper, и это пример кода, когда я использую эту функцию
if (filePath == null) {
File photoFile = null;
try {
photoFile = FileHelper.createImageFile();
} catch (IOException e) {
e.printStackTrace();
}
filePath = photoFile.getAbsolutePath();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;
try {
bmp = getBitmap(filePath);
} catch (Exception e) {
e.printStackTrace();
bmp = BitmapHelper.reduceResolution(filePath, widthPixels, heightPixels);
}
}
это работает на некоторых устройствах, и это также выдает ошибку на некоторых устройствах, и ошибка:
W/System.err: java.io.IOException: Permission denied
W/System.err: at java.io.UnixFileSystem.createFileExclusively0(Native Method)
W/System.err: at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)
at java.io.File.createTempFile(File.java:2018)
at com.mogawe.mosurvei.util.FileHelper.createImageFile(FileHelper.java:671)
кто-нибудь знает, как это исправить?
Комментарии:
1. вы получили разрешение на хранение ?
2. Какова ваша targetSdkVersion и в API какого устройства вы запускаете это приложение? (Потому что в Oreo я могу получить путь к файлу, используя sme-код)
3. @NaitikSoni мой targetSdkVersion равен 29, а minSdkVersion равен 23
4. @Jyotishbis Было так, что я сделал это
Ответ №1:
Я нашел решение для своей собственной проблемы >_<, поэтому решение было здесь. Если вы нацелены на Android 10 (уровень API 29) или выше, установите значение requestLegacyExternalStorage
на true
в файле манифеста вашего приложения:
<manifest ... >
<!-- This attribute is "false" by default on apps targeting
Android 10 or higher. -->
<application android:requestLegacyExternalStorage="true" ... >
...
</application>
</manifest>
надеюсь, это поможет тем, у кого такая же проблема, спасибо!