Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Falha Integração câmera

Boa Tarde, Estou realizando o curso de criar app android com o androidStudio e ao realizar a integração com a câmera estou recebendo a exception abaixo a primeira linha é eu imprimindo o caminho do celular onde vai ser salvo a foto.

I/System.out: /storage/emulated/0/Android/data/br.com.alura.agemda/files/1483301685247.jpg
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: br.com.alura.agemda, PID: 3910
                  android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/br.com.alura.agemda/files/1483301685247.jpg exposed beyond app through ClipData.Item.getUri()
                      at android.os.StrictMode.onFileUriExposed(StrictMode.java:1799)
                      at android.net.Uri.checkFileUriExposed(Uri.java:2346)
                      at android.content.ClipData.prepareToLeaveProcess(ClipData.java:845)
                      at android.content.Intent.prepareToLeaveProcess(Intent.java:8941)
                      at android.content.Intent.prepareToLeaveProcess(Intent.java:8926)
                      at android.app.Instrumentation.execStartActivity(Instrumentation.java:1517)
                      at android.app.Activity.startActivityForResult(Activity.java:4225)
                      at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:50)
                      at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:79)
                      at android.app.Activity.startActivityForResult(Activity.java:4183)
                      at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:859)
                      at br.com.alura.agemda.FormularioActivity$1.onClick(FormularioActivity.java:59)
                      at android.view.View.performClick(View.java:5637)
                      at android.view.View$PerformClick.run(View.java:22429)
                      at android.os.Handler.handleCallback(Handler.java:751)
                      at android.os.Handler.dispatchMessage(Handler.java:95)
                      at android.os.Looper.loop(Looper.java:154)
                      at android.app.ActivityThread.main(ActivityThread.java:6119)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Application terminated.

Abaixo é a implementação do listener do app que faz a integração com a câmera

                Intent intentCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                caminhoFoto=getExternalFilesDir(null)+"/"+System.currentTimeMillis() +".jpg";
                System.out.println(caminhoFoto);
                File arquivoFoto=new File(caminhoFoto);
                intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(arquivoFoto));
                startActivityForResult(intentCamera, CODIGO_CAMERA);
5 respostas
solução!

Oi Robson, tudo bem ?

Cara fica tranquilo, pelo que vi do seu código esta tudo funcionando !

O problema que está acontecendo é um pouco mais chato, isso só ocorre na versão 7 do Android, eles decidiram que passar o caminho completo ( file://....) era uma má prática e começaram a desencorajar os desenvolvedores a fazerem isso, por isso que você está levando essa Exception, para você não continuar levando, eu aconselho que você crie um emulador com a versão 6.0 do Android, ou caso queira continuar para a versão 7.0 você consegue usar essa classe aqui, que já tem o passo a passo falando o que precisa ser feito :

https://developer.android.com/reference/android/support/v4/content/FileProvider.html

Espero ter ajudado !

Abraços

Olá Matheus, estou bem e tranquilo.

Obrigado pela observação e vou estudar o link da FileProvider informado, mas como estou começando a conheçer os recursos do android creio que por questões didaticas, vou criar 1 emulador com o android 6.0 para continuar o curso é após terminar vou implementar o provider informado.

Me ajudou bastante. Att Robson

Boa tarde,

Acredito que se adicionassem um exemplo da utilização da câmera para a versão atual do Android (AVD com Android 6/7) nas atividades da Aula 2 seria de grande valia, pois acredito que todos que estão realizando o curso atualmente estejam passando por este problema.

Obrigado.

Concordo, precisamos da versão do código para sdk 24 ou mais

Olá, vejam a minha solução no tópico NÃO VÃO ATUALIZAR?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software