Я звоню камеру через startActivityForResult
с android.provider.MediaStore.ACTION_IMAGE_CAPTURE
и android.provider.MediaStore.EXTRA_OUTPUT
хотят получить полноразмерное захватили изображение обратно в моем onActivityResult
ACTION_IMAGE_CAPTURE с EXTRA_OUTPUT создает обрабатывается «Обработка ошибок Media Storage»
Но в тот момент я нажимаю на галочке после принимая изображение, момент, когда он должен быть доставлен обратно, я получаю сообщение об ошибке, которое свободно переводится как «Ошибка камеры - возникла проблема при сохранении одного из ваших изображений или клипов» - я могу закрыть диалоговое окно или отправить отзыв команда Google Dev.
выход Logcat в этот момент:
09-01 22:01:46.157 24523-24523/com.google.android.GoogleCamera E/CAM_FatalErrorHandler﹕ Handling Media Storage Failure:
java.lang.Exception
at com.android.camera.FatalErrorHandlerImpl.onMediaStorageFailure(FatalErrorHandlerImpl.java:37)
at com.android.camera.PhotoModule.onError(PhotoModule.java:274)
at com.android.camera.PhotoModule.onCaptureDone(PhotoModule.java:1289)
at com.android.camera.PhotoModule$8.onClick(PhotoModule.java:593)
at android.view.View.performClick(View.java:4781)
at android.view.View$PerformClick.run(View.java:19873)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5289)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:115)
09-01 22:01:46.158 24523-24523/com.google.android.GoogleCamera E/CAM_CameraUtil﹕ Show fatal error dialog
Мой код (очищен от посторонних частей):
private File tmpFile;
private Uri tmpFileURI;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
// TempFile needs to be created for the camera to store the fullsize captured image
// tmpFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + MainActivity.APP_BASE_FOLDER + "/tmp.jpg");
try
{
tmpFile = File.createTempFile("my_app", ".jpg");
} catch (IOException e)
{
e.printStackTrace();
}
tmpFileURI = Uri.fromFile(tmpFile);
chooseCamera.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
takePicture = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
takePicture.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, tmpFileURI);
startActivityForResult(takePicture, CreateModifiyEventFragment.CHOOSE_BY_CAMERA);//zero can be replaced with any action code
}
});
chooseLibrary.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
pickPhoto = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(pickPhoto, CreateModifiyEventFragment.CHOOSE_BY_LIBRARY);//one can be replaced with any action code
}
});
}
Просмотренные константы объявляются так:
public final static int CHOOSE_BY_CAMERA = 1;
public final static int CHOOSE_BY_LIBRARY = 0;
код обратного вызова никогда не достигается, поэтому я просто пощажу вам больше кода. Вы можете видеть, что я попробовал его через tmpFile и обычный файл на внешнем хранилище.
Права доступа устанавливаются также
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Я понятия не имею, что вызывает эту ошибку или то, что я пропавших без вести. Я использовал другие ответы SO, чтобы создать этот код, и я не вижу никаких различий.
Любая помощь была бы принята с благодарностью. Спасибо заранее!
Я попробовал '// tmpFile = new File (Environment.getExternalStorageDirectory(). GetAbsolutePath() + MainActivity.APP_BASE_FOLDER +" /tmp.jpg ");' как вы можете видеть, с той же ошибкой. Но 'Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_DCIM)', кажется, разрешает ошибку. Можешь мне сказать почему? Не следует ли записывать камеру в первое место? – LilaQ
@LilaQ: никогда не используйте конкатенацию строк для создания путей к файлам. Используйте соответствующие конструкторы 'File'. Я предполагаю, что то, что у вас есть, приводит к недопустимому пути (например, double '/', missing '/'). – CommonsWare
Я вышел из пути, чтобы убедиться, что он действителен. Или камера рассматривается вне моего приложения, поэтому не имеет права на запись на externalStorageDirectory? – LilaQ