Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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..