4
respostas

Aplicação quebra ao iniciar a Intent da Câmera

Quando tento iniciar a Intent da câmera a aplicação trava, segue o código da Activity.

Button btnCamera = (Button) findViewById(R.id.formulario_botao_imagem);
        btnCamera.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intentCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                String caminhoFoto = getExternalFilesDir(null)+ "/" + System.currentTimeMillis() + ".jpg";
                File arquivo = new File(caminhoFoto);
                intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(arquivo));
                startActivity(intentCamera);
            }
        });

E olhando no Monitor, tem esse resultado de saída, dizendo que é uma exceção que o arquivo está exposto além do aplicativo através de "ClipData.Item.getUri()".

E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: info.rogerio.agenda, PID: 11554
                  android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/info.rogerio.agenda/files/1514939972887.jpg exposed beyond app through ClipData.Item.getUri()
                      at android.os.StrictMode.onFileUriExposed(StrictMode.java:1958)
                      at android.net.Uri.checkFileUriExposed(Uri.java:2348)

Alguém teve um erro semelhante, ou poderia me ajudar? Obrigado a todos desde já!

4 respostas

Oi Rogerio, tudo bem ?

Esse problema é para o android 7 e posteriores, dá uma olhadinha na solução do instrutor, que ele explica como resolver isso :D

Oi Matheus, tudo sim e você? Obrigado pela resposta.

Então, no vídeo o instrutor não chegou a falar sobre possíveis erros relacionados. Até aí tudo bem. Eu dei uma pesquisada e vi que isso acontece por alguma atualização no Android 6 em diante e pra solucionar tive que alterar o target SDK do projeto.

Até então o target SDK era o 26, do Android Oreo. E tive que alterar para o 23. Agora já está rodando. Tem algum problema de compatibilidade ou perda de potencial em fazer isso?

Não haverá nenhum..

Na solução do instrutor ele mostra como resolver isso.

Olá Rogério!

Não sei se o problema já foi solucionado, mas tente verificar as permissões do seu app no arquivo Manifest.

Para utilizar a câmera em um aplicativo, é necessário "pedir permissão" para o usuário. O que deve ser declarado no Manifest é algo nesse sentido:

 <uses-permission android:name="android.permission.CAMERA" />
 <uses-feature android:name="android.hardware.camera" />
 <uses-feature android:name="android.hardware.camera.autofocus" />

Espero ter ajudado!

Bons estudos!