@Greedov

Как сохранить картинку полученную из стандартной камеры андроид?

Я пытаюсь сохранить фото полученное с системного приложения камеры, но приложение вылетает.
final int CAMERA_RESULT = 1;

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

        File file = new File("/data/data/com.nexus.foto/Files", "foto.png");

        Uri outputFileUri1 = Uri.fromFile(file);

        intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri1);

Приложение крашится на этой строке
startActivityForResult(intent, CAMERA_RESULT);

Логи что влезли:
2019-10-14 08:19:00.594 14057-14057/com.nexus.foto E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.nexus.foto, PID: 14057
    android.os.FileUriExposedException: file:///data/data/com.nexus.foto/Files/foto.png exposed beyond app through ClipData.Item.getUri()
        at android.os.StrictMode.onFileUriExposed(StrictMode.java:1799)
        at android.net.Uri.checkFileUriExposed(Uri.java:2354)
        at android.content.ClipData.prepareToLeaveProcess(ClipData.java:832)
        at android.content.Intent.prepareToLeaveProcess(Intent.java:8929)
        at android.content.Intent.prepareToLeaveProcess(Intent.java:8914)
        at android.app.Instrumentation.execStartActivity(Instrumentation.java:1519)
        at android.app.Activity.startActivityForResult(Activity.java:4396)
        at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:676)
        at android.app.Activity.startActivityForResult(Activity.java:4355)
        at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:663)
        at com.nexus.foto.MainActivity.onClick(MainActivity.java:41)
        at android.view.View.performClick(View.java:5619)
        at android.view.View$PerformClick.run(View.java:22298)
        at android.os.Handler.handleCallback(Handler.java:754)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:165)
        at android.app.ActivityThread.main(ActivityThread.java:6375)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)
2019-10-14 08:19:00.605 14057-14057/com.nexus.foto I/Process: Sending signal. PID: 14057 SIG: 9


Я искренне не понимаю в чем дело.
  • Вопрос задан
  • 413 просмотров
Решения вопроса 1
402d
@402d
начинал с бейсика на УКНЦ в 1988
Чтобы получить большое фото ваше приложение должно реализовать контент провайдера. В интенте на запрос передаешь указание куда камера должна писать вам файл.

ВАМ ПОТРЕБУЮТСЯ СЛЕДУЮЩИЕ ФУНКЦИИ / ДЕЙСТВИЯ
File sharePath = new File(getCacheDir(), "share"); // в отведенной системе моей проге папке . подпапка для обмена
photoFile = File.createTempFile() ; // сюда камера будет писать снимок
photoURI = FileProvider.getUriForFile(); // преобразовать его в контент стрим

ГЛАВНОЕ . АНДРОИД НЕ ЛЮБИТ, КОГДА ПРИЛОЖЕНИЯ ЛЕЗУТ К ФАЙЛОВОЙ СИСТЕМЕ ЗА ПРЕДЕЛАМИ
ВЫДАННЫХ ЕМУ ПАПОК.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы