5
respostas

Erro ao acessar câmera

Olá

Está ocorrendo erro na execução, mais precisamente na linha onde tem o comando "intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile ( arquivoFoto ));" Se eu deixar em comentários roda a chamada da startActivity, retirando os comentários ocorre o erro "Agenda has stopped" Open app again

O erro na console é: E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.luigi.agenda, PID: 7651 android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/com.example.luigi.agenda/files/1523476478708.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:832) at android.content.Intent.prepareToLeaveProcess(Intent.java:8909) at android.content.Intent.prepareToLeaveProcess(Intent.java:8894) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1517) at android.app.Activity.startActivityForResult(Activity.java:4224) at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54) at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:67) at android.app.Activity.startActivityForResult(Activity.java:4183) at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:720) at com.example.luigi.agenda.FormularioActivity$1.onClick(FormularioActivity.java:51) at android.view.View.performClick(View.java:5610) at android.view.View$PerformClick.run(View.java:22265) 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:6077) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) Application terminated.


5 respostas

Olá Cesar,

Esse erro costuma acontecer porque a partir do Android 7 o procedimento para compartilhar arquivos entre aplicativos mudou um pouco. Colocamos a explicação de como fazer a adaptação para o Android 7 na explicação do exercício a seguir:

https://cursos.alura.com.br/course/android-studio-ii-integracoes-e-recursos/task/23374

Tenta fazer as alterações sugeridas pois isso deve resolver esse problema.

O código apresentado no tópico não funciona. Se faz necessário acrescentar "FormulárioActivity" antes do this:

intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, FileProvider.getUriForFile(FormularioActivity.this, BuildConfig.APPLICATION_ID + ".provider", arquivoFoto));

Olá Cesar,

Provavelmente no seu caso foi necessário colocar o FormularioActivity.this pois o código que invoca a câmera está dentro de um listener que é uma classe anônima. Ao usar o this dentro de uma classe anònima estamos referenciando a própria classe anônima e não a Activity.

No exemplo do exercício, fazemos a chamada da câmera em um método separado tiraFoto() e por isso não precisamos referenciar diretamente a Activity e podemos usar o thisdiretamente pois não estamos dentro de uma classe anônima.

Em qual treinamento foi criado esse método ? tiraFoto()

Este erro estava ocorrendo no treinamento 02-Usando a Camera e 03 - Salvando arquivos de imagem única

Até o momento eu não tinha esse método tiraFoto() criado

Ah entendi, o método tiraFoto() foi criado só no exemplo da explicação mesmo só pra organizar um pouco melhor o código. Quando a gente começa a colocar muito código em classes anônimas e código começa e ficar mais difícil de ler então a gente costuma extrair o código pra um outro método só pra facilitar a leitura mesmo.

Não tem problema resolver como você fez, é uma opçao válida também. A versão que colocamos foi só pra deixar a explicação mais enxuta.