Приложение продолжает падать, когда я пытаюсь сохранить изображение в галерею - PullRequest
0 голосов
/ 08 марта 2019

Я хотел сделать фотографию и сохранить ее в галерее.Затем прочитайте эту фотографию из галереи и преобразуйте ее в текст (используя ocr)

Но мое приложение продолжает падать, когда я пытаюсь сохранить его с этой строкой кода

cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, pictureUri);

Я отлаживаю свое приложениеи обнаружил, что эта линия несет ответственность за сбой.Но без этой строки я не могу сохранить свой образ.Как я могу это сделать?

package com.example.takepicture;

import ...

public class MainActivity extends AppCompatActivity {   
    private static final int CAMERA_REQUEST = 1888;
    ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 
        Button btnCamera = (Button) findViewById(R.id.btnCamera);
        imageView = (ImageView) findViewById(R.id.ImageView); 

        btnCamera.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                File pictureDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
                String pictureName = getPictureName();

                File imageFile = new File(pictureDirectory,pictureName);
                Uri pictureUri = Uri.fromFile(imageFile);
                cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, pictureUri);
                startActivityForResult(cameraIntent, CAMERA_REQUEST);
                //capturarFoto();


            }
        });

    }

    private String getPictureName() {
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        return "Img" + timeStamp + ".jpg";


    }
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == RESULT_OK) {
            if (requestCode == CAMERA_REQUEST) {

            }
        }
    }
}

1 Ответ

0 голосов
/ 08 марта 2019

Самое быстрое решение добавляет:

StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());

где-то перед звонком: startActivityForResult(...)

Но правильный (для API> 24):

  • создание URI через FileProvider.getUriForFile(...) и

  • создание провайдера (и добавление его в файл манифеста)

Вы можете найти больше информации там: https://stackoverflow.com/a/50265329/5529263

...