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

Agenda has stopped

Boa tarde! Estou tendo um problema ao tentar tirar a foto. Aparece esse erro:

D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: br.com.alura.agenda, PID: 10383
                  android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/br.com.alura.agenda/files/1525278963818.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:68)
                      at android.app.Activity.startActivityForResult(Activity.java:4183)
                      at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:751)
                      at android.app.Activity.startActivity(Activity.java:4507)
                      at android.app.Activity.startActivity(Activity.java:4475)
                      at br.com.alura.agenda.FormularioActivity$1.onClick(FormularioActivity.java:47)
                      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)
3 respostas

Código:

package br.com.alura.agenda;

import android.content.Intent;
import android.net.Uri;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.io.File;

import br.com.alura.agenda.dao.AlunoDAO;
import br.com.alura.agenda.modelo.Aluno;

public class FormularioActivity extends AppCompatActivity {


    private FormularioHelper helper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_formulario);

        helper = new FormularioHelper(this);
        Intent intent = getIntent();
        Aluno aluno = (Aluno) intent.getSerializableExtra("aluno");
        if(aluno != null){
            helper.preencheFormulario(aluno);
        }

        Button botaoFoto =(Button) findViewById(R.id.formulario_botao_foto);
        botaoFoto.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent intentCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                String caminhoFoto = getExternalFilesDir(null ) + "/foto.jpg";
                File arquivoFoto = new File(caminhoFoto);
                intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(arquivoFoto));
                startActivity(intentCamera);
            }
        });


//        //retorna a view que representa o botao salvar
//        Button botaoSalvar = findViewById(R.id.formulario_salvar);
//        //cria o evento listener ao clicar o botão
//        botaoSalvar.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                Toast.makeText(FormularioActivity.this,"Aluno salvo!", Toast.LENGTH_LONG).show();
//                //Intent vaiPraLista = new Intent(FormularioActivity.this, ListaAlunosActivity.class);
//                //startActivity(vaiPraLista);
//                finish();
//            }
//        });
    }

    //menu de título
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_formulario, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.menu_formulario_ok:
                //Intent vaiPraLista = new Intent(FormularioActivity.this, ListaAlunosActivity.class);
                //startActivity(vaiPraLista);
                Aluno aluno = helper.pegaAluno();

                AlunoDAO alunoDAO = new AlunoDAO(this);
                if(aluno.getId() != null){
                    alunoDAO.altera(aluno);
                }else{
                    alunoDAO.insere(aluno);
                }
                alunoDAO.close();


                Toast.makeText(FormularioActivity.this,"Aluno "+ aluno.getNome() + " salvo!", Toast.LENGTH_LONG).show();

                //conexao
                //query pra salvar o aluno
                //fecha o banco



                finish();
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}
solução!

Fala ai Renan, de boa ?

Cara você provavelmente está usando o android 7 ou superior, para esse caso muda um pouco a forma de trabalhar com a câmera, na solução do instrutor na atividade ele mostra o passo a passo para corrigir, dá uma olhadinha e fala para gente se deu tudo certo ?

Opa, tudo bem e por aí?

Sim estou usando essa versão, eu estava usando a 6 mas deu um problema na exibição da câmera e aí parti pro 7. Fiz o método o proposto e foi resolvido!