@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


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

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

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

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

Войти через центр авторизации
Похожие вопросы
Hunt Rangers Москва
от 220 000 до 270 000 ₽
Спецвузавтоматика Ростов-на-Дону
от 100 000 до 250 000 ₽
26 июн. 2024, в 12:33
25000 руб./за проект
26 июн. 2024, в 12:12
70000 руб./за проект
26 июн. 2024, в 11:58
10000 руб./за проект