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

Erro na câmera

 //botao foto do 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);
                 caminhoFoto = getExternalFilesDir(null) + "/" + System.currentTimeMillis() + ".jpg";
                File arquivoFoto = new File(caminhoFoto);
                intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(arquivoFoto));
                startActivityForResult(intentCamera, CODIGO_CAMERA);


            }
        });
    }
23 respostas
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        //Abrir a foto que a camera tirou
        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(bitmapReduzido);
                foto.setScaleType(ImageView.ScaleType.FIT_XY);
            }
    }
}

```

quando eu vou abrir para bater foto na câmera ele para, estou usando direto no device.. meu celular é um LG Q6, android 7.1.

Clarice, tudo bem ?

Como você usa android 7, você precisa fazer um código diferente do ensinado em aula.

Na solução do instrutor tem o código para android 7, dá uma olhadinha lá.

 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);
                caminhoFoto = getExternalFilesDir(null) + "/" + System.currentTimeMillis() + ".jpg";
                File arquivoFoto = new File(caminhoFoto);
                intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, FileProvider.getUriForFile(FormularioActivity.this, BuildConfig.APPLICATION_ID + ".provider", arquivoFoto));
                startActivityForResult(intentCamera, 567);
            }
        });
    }


            @Override
            protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                if (requestCode == CODIGO_CAMERA && resultCode == Activity.RESULT_OK) {
                    Bitmap bitmap = BitmapFactory.decodeFile(caminhoFoto);
                    Bitmap bitmapReduzido = bitmap.createScaledBitmap(bitmap, 150, 150, true);
                    campoFoto.setImageBitmap(bitmapReduzido);
                    campoFoto.setTag(caminhoFoto);
                }
            }

Mesmo assim da erro...

public class FormularioActivity extends AppCompatActivity {

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

Qual é o erro que está dando ?

02-26 18:14:28.992 19310-19310/br.com.alura.agenda E/AndroidRuntime: FATAL EXCEPTION: main
                                                                     Process: br.com.alura.agenda, PID: 19310
                                                                     java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=com.lge.camera/.app.CameraActivity clip={text/uri-list U:content://br.com.alura.agenda.provider/external_files/Android/data/br.com.alura.agenda/files/1519679668985.jpg} (has extras) } from ProcessRecord{530dd7a 19310:br.com.alura.agenda/u0a435} (pid=19310, uid=10435) with revoked permission android.permission.CAMERA
                                                                         at android.os.Parcel.readException(Parcel.java:1684)
                                                                         at android.os.Parcel.readException(Parcel.java:1637)
                                                                         at android.app.ActivityManagerProxy.startActivity

Clarice, acho que você pulou uma etapa.

Você vai ter que ir no emulador e clicar no icone do aplicativo e segurar, para ir nas opções sobre o app.

Lá você vai ver quais são as permissões que o aplicativo precisa. Basta você aceitar as permissões e imagino que deva funcionar.

Faz o teste e fala para gente.

Olá Matheus, eu consegui abrir a câmera agora e bato a foto, mais agora tem mais um problema.. quando eu aperto o ok, para salvar a imagem do aluno, o app para de novo.. O Meu código está assim..


        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);
                caminhoFoto = getExternalFilesDir(null) + "/" + System.currentTimeMillis() + ".jpg";
                File arquivoFoto = new File(caminhoFoto);
                intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, FileProvider.getUriForFile(FormularioActivity.this, BuildConfig.APPLICATION_ID + ".provider", arquivoFoto));
                startActivityForResult(intentCamera, 567);
            }
        });
    }


            @Override
            protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if(resultCode == Activity.RESULT_OK){
            if (requestCode == CODIGO_CAMERA) {
                    Bitmap bitmap = BitmapFactory.decodeFile(caminhoFoto);
                    Bitmap bitmapReduzido = bitmap.createScaledBitmap(bitmap, 150, 150, true);
                    campoFoto.setImageBitmap(bitmapReduzido);
                    campoFoto.setTag(caminhoFoto);
                }
            }
    }

As permissões que eu tenho no androidManifest são essas:

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

Consegue ver qual erro que está dando ?

ava.lang.IllegalStateException: could not connect to GoogleApiClient: ConnectionResult{statusCode=API_UNAVAILABLE, resolution=null, message=null}
                                                            at com.google.android.wearable.datatransfer.internal.DefaultPeerProvider.blockingConnect(DefaultPeerProvider.java:73)
                                                            at com.google.android.wearable.datatransfer.internal.DefaultPeerProvider.getConnectedPeers(DefaultPeerProvider.java:30)
                                                            at com.google.android.wearable.datatransfer.internal.DataSyncServiceHelper.processIntent(DataSyncServiceHelper.java:380)
                                                            at com.google.android.wearable.datatransfer.internal.DataSyncServiceHelper.access$000(DataSyncServiceHelper.java:49)
                                                            at com.google.android.wearable.datatransfer.internal.DataSyncServiceHelper$IntentProcessor.run(DataSyncServiceHelper.java:727)
                                                            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
                                                            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
                                                            at java.lang.Thread.run(Thread.java:761)

seria isso?

Clarice,

Esse erro tá bem bizarro, nunca o vi.

Qual é a versão do android que está rodando no emulador ?

Eu estou fazendo direto no meu celular..

E/QCamera: <HAL><E> static int qcamera::QCameraMemory::allocOneBuffer(qcamera::QCameraMemory::QCameraMemInfo&, unsigned int, size_t, bool, uint32_t): 495: main_ion_fd=92 size=19570688 secure_mode=0 cached=1
02-27 16:19:59.913 880-32359/? E/QCamera: <HAL><E> static int qcamera::QCameraMemory::allocOneBuffer(qcamera::QCameraMemory::QCameraMemInfo&, unsigned int, size_t, bool, uint32_t): 496: alloc len=19570688 align=4096 heap_id_mask=33554432 flags=1

isso tb apareceu..

isso tb apareceu..

e isso..

FATAL EXCEPTION: main
                                                                     Process: br.com.alura.agenda, PID: 29839
                                                                     java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=123, result=-1, data=null} to activity {br.com.alura.agenda/br.com.alura.agenda.FormularioActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageBitmap(android.graphics.Bitmap)' on a null object reference
solução!

Esse seu campoFoto ai, que é um imageView, qual foi o momento que você fez findViewById para ele ?

Deu certo Matheus, desculpa as questões hehe..

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