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

app parou

O aplicativo pára (em teste real) ao tentar salvar a foto tirada.

10 respostas

Oi Fernando, e no log não aparece nada? No emulador funciona?

Olá Fernando,

Eu tive o mesmo problema, mas no meu caso era por conta da minha versão do android, eu precisava dar permissão de leitura/escrita no cartão.

Alberto: No emulador quando tento salvar a foto tirada nada acontece. Não há log algum.

Carlos: No meu caso uso a API 16, android 4.1 (restrições de SD card só a partir da versão 4.4.2)

Fernando, tudo bem ?

Você consegue disponibilizar o código onde está disparando a câmera e onde trata o retorno, para tentarmos descobrir o que é ?

Abraços

public class FormularioActivity extends AppCompatActivity {

    public static final int CODIGO_CAMERA = 567;
    private FormularioHelper helper;
    private String caminhoFoto;

    @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 view) {
                Intent intentCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                caminhoFoto = getExternalFilesDir(null) + "/" + System.currentTimeMillis() + ".jpg";
                File arquivoFoto = new File(caminhoFoto);
                intentCamera.putExtra( MediaStore.EXTRA_OUTPUT, Uri.fromFile(arquivoFoto) );
                startActivityForResult(intentCamera, CODIGO_CAMERA);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == Activity.RESULT_OK) {
            if (requestCode == CODIGO_CAMERA) {
                ImageView foto = (ImageView) findViewById(R.id.formulario_foto);
                Bitmap bitmap = BitmapFactory.decodeFile(caminhoFoto);
                Bitmap bitmapReduzido = Bitmap.createScaledBitmap(bitmap, 300, 300, true);
                foto.setImageBitmap(bitmap);
                foto.setImageBitmap(bitmapReduzido);
                //helper.carregaImagem(caminhoFoto);
            }
        }
    }

Oi Fernando,

Cara, dá uma olhadinha aqui :


    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == Activity.RESULT_OK) {
            if (requestCode == CODIGO_CAMERA) {
                ImageView foto = (ImageView) findViewById(R.id.formulario_foto);
                Bitmap bitmap = BitmapFactory.decodeFile(caminhoFoto);
                Bitmap bitmapReduzido = Bitmap.createScaledBitmap(bitmap, 300, 300, true);
                foto.setImageBitmap(bitmap);
                foto.setImageBitmap(bitmapReduzido);
                //helper.carregaImagem(caminhoFoto);
            }
        }

Imagino que você não precise desta linha :

  foto.setImageBitmap(bitmap);

Pois você já está colocando o bitmapReduzido .

Além disso, me tira uma dúvida, você está rotacionando o celular para tirar a foto ?

Espero ter ajudado !

Tudo indica que seja um caso particular do android 4.1. Estou criando um novo simulador com API 23, Andorid 6.0 para ver se vai resolver.

(executei o projeto pronto também mas o mesmo acontece)

Matheus ali, como eu estava alterando essa parte (excluindo o tratamento da foto, para ver se pelo menos algo aconteceria), eu só esqueci de deixar o código como era antes. Mas você tem razão, essa linha não precisa.

Não estou rotacionando.

Em modo desenvolvedor ativado (no android) consegui acompanhar as interações dentro do Android Studio por USB.

W/ApplicationContext: Unable to create external files directory
W/IInputConnectionWrapper: showStatusIcon on inactive InputConnection
D/AndroidRuntime: Shutting down VM
W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x40e77438)
E/AndroidRuntime: FATAL EXCEPTION: main
                  java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=567, result=-1, data=null} to activity {br.com.alura.agenda/br.com.alura.agenda.FormularioActivity}: java.lang.NullPointerException
                      at android.app.ActivityThread.deliverResults(ActivityThread.java:3209)
                      at android.app.ActivityThread.handleSendResult(ActivityThread.java:3252)
                      at android.app.ActivityThread.access$1200(ActivityThread.java:143)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1289)
                      at android.os.Handler.dispatchMessage(Handler.java:99)
                      at android.os.Looper.loop(Looper.java:137)
                      at android.app.ActivityThread.main(ActivityThread.java:4960)
                      at java.lang.reflect.Method.invokeNative(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:511)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
                      at dalvik.system.NativeStart.main(Native Method)
                   Caused by: java.lang.NullPointerException
                      at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:490)
                      at br.com.alura.agenda.FormularioHelper.carregaImagem(FormularioHelper.java:58)
                      at br.com.alura.agenda.FormularioActivity.onActivityResult(FormularioActivity.java:61)
                      at android.app.Activity.dispatchActivityResult(Activity.java:5387)
                      at android.app.ActivityThread.deliverResults(ActivityThread.java:3205)
                      at android.app.ActivityThread.handleSendResult(ActivityThread.java:3252) 
                      at android.app.ActivityThread.access$1200(ActivityThread.java:143) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1289) 
                      at android.os.Handler.dispatchMessage(Handler.java:99) 
                      at android.os.Looper.loop(Looper.java:137) 
                      at android.app.ActivityThread.main(ActivityThread.java:4960) 
                      at java.lang.reflect.Method.invokeNative(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:511) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
                      at dalvik.system.NativeStart.main(Native Method)
solução!

Pessoal acabei descobrindo que o problema pode ser com o meu próprio smartphone (sendo que o mesmo já possuía problemas com a câmera quando comprei ele usado), pois fiz o teste real em outro celular com Android 4.4.2 e funcionou direitinho com o mesmo código de antes.

Se não for a versão do Android (padrão de fábrica) , então só pode ser algum problema com o próprio smartphone (alterações no software ou no hardware).

Obrigado a todos!