Недавно я реализовал Crashlytics и прохожу через настоящий рог изобилия аварийных журналов. Меня озадачило. В журнале показано, что я не мог открыть файл для потоковой передачи (в частности, написать фотографию JPG, которую я взял), однако в одной строке до этого я (верю), я ее успешно создал. Исключение (s) из Crashlytics:FileNotFoundException после файла, созданного для вывода потока
Non-fatal Exception: java.io.FileNotFoundException
/storage/emulated/0/mycompany/9311ebcb-4dd5-493c-8fbd-46b242d4991d/b9a9a18e-0cd9-468d-83f3-7466b65485f7.jpg: open failed: ENOENT (No such file or directory)
raw
libcore.io.IoBridge.open (IoBridge.java:409)
java.io.FileOutputStream.<init> (FileOutputStream.java:73)
com.invocore.mycompany.utility.Utilities.saveImageJPEG (Utilities.java:698)
com.invocore.mycompany.utility.Utilities.saveImageJPEG (Utilities.java:685)
com.invocore.mycompany.utility.Utilities.saveImage (Utilities.java:634)
com.invocore.mycompany.CameraCaptureActivity.savePhoto (CameraCaptureActivity.java:338)
com.invocore.mycompany.CameraCaptureActivity.access$300 (CameraCaptureActivity.java:39)
com.invocore.mycompany.CameraCaptureActivity$SaveTask.doInBackground (CameraCaptureActivity.java:266)
com.invocore.mycompany.CameraCaptureActivity$SaveTask.doInBackground (CameraCaptureActivity.java:246)
android.os.AsyncTask$2.call (AsyncTask.java:288)
java.lang.Thread.run (Thread.java:841)
Caused by libcore.io.ErrnoException
libcore.io.Posix.open (Posix.java)
java.io.FileOutputStream.<init> (FileOutputStream.java:73)
com.invocore.mycompany.utility.Utilities.saveImageJPEG (Utilities.java:698)
com.invocore.mycompany.utility.Utilities.saveImageJPEG (Utilities.java:685)
com.invocore.mycompany.utility.Utilities.saveImage (Utilities.java:634)
com.invocore.mycompany.CameraCaptureActivity.savePhoto (CameraCaptureActivity.java:338)
com.invocore.mycompany.CameraCaptureActivity.access$300 (CameraCaptureActivity.java:39)
com.invocore.mycompany.CameraCaptureActivity$SaveTask.doInBackground (CameraCaptureActivity.java:266)
com.invocore.mycompany.CameraCaptureActivity$SaveTask.doInBackground (CameraCaptureActivity.java:246)
android.os.AsyncTask$2.call (AsyncTask.java:288)
java.lang.Thread.run (Thread.java:841)
Вот исходный код:
public static void saveImageJPEG(Bitmap image, int width, int height, String filename, String directory, int quality)
{
Bitmap scaled = Bitmap.createScaledBitmap(image, width, height, true);
OutputStream outStream = null;
// Only add extension if we need to
if (!filename.toLowerCase().endsWith(".jpg")) {
filename = filename + ".jpg";
}
try {
File file = new File(directory, filename);
outStream = new FileOutputStream(file);
scaled.compress(Bitmap.CompressFormat.JPEG, quality, outStream);
}
catch(Exception e) {
Utilities.logException(e);
e.printStackTrace();
}
finally {
if (outStream != null) {
try {
outStream.flush();
outStream.close();
}
catch (Exception ex) {
// Ignore for now
}
}
}
}
Мои виды использования разрешения_доступа от моего AndroidManifest.xml
являются:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.NFC" />
Исключение происходит в outStream = new FileOutputStream(file);
, но Я ожидал бы, что у него возникла ошибка, когда я попытался создать сам файл, в который будет транслироваться вывод.
Вероятно, что-то отсутствует очевидный ...
У вас есть разрешение на использование внешнего хранилища в вашем манифесте? – alijandro
Извините - да. Я не могу реплицировать эту проблему локально, хотя, очевидно, это происходит в производстве кому-то ... Я разместил разрешения на использование выше ... может быть, меня что-то упущено. –
Как вы получили «каталог» при вызове 'saveImageJPG'? 'Environment.getExternalStorageDirectory()'? – alijandro