4
respostas

NÃO VÃO ATUALIZAR?

Existe uma diferença de código na versão atual, gerando um erro ao obter a foto. Identifiquei que há outras questões aqui no fórum e uma indicação para a documentação do moderador. Com todo respeito, para muitos que estão começando na programação, ainda não interessa um link para a documentação, e sim uma instrução de como fazer. Foi sugerido por outro aluno de que houvesse um tópico, mesmo que escrito, mostrando como fazer. A ALURA não vai fazer isso?

4 respostas

Oi Alexandre, vamos correr atrás disso e retornamos para você aqui. Obrigado.

Também penso o mesmo que o colega. No código observo agora que há um problema quando tentamos recuperar os dados de um aluno que ainda está sem uma foto cadastrada.

Sugiro um curso que demonstre alguns outros aspectos como login, validação de dados do formulário, layouts mais modernos e integração com outros webservices.

Abraços.

Olá,

A documentação cita que a partir do Android 7.0, API 25, é necessário utlizar um FileProvider. Segui a documentação e agora consigo tirar a foto normalmente.

Estou utilizando meu smartphone Moto G3 XT1543 (LineageOS 14.1, Android 7.1.1, API 25) e o Moto G3-TE XT1556 (Stock Android 6.0). Ambos consigo tirar a foto com sucesso e salvar no banco de dados.

Abaixo como ficou meu código:

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="br.eti.cvm.agenda">
...
<uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        android:maxSdkVersion="18" />
...
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
...
<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="br.eti.cvm.agenda.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths"></meta-data>
        </provider>
</application>
</manifest>

res/xml/file_paths.xml:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="my_images" path="Android/data/br.eti.cvm.agenda" />
</paths>

FormularioActivity.java:

@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 botaoCamera = (Button) findViewById(R.id.formulario_botao);
        botaoCamera.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);
                Uri fotoURI = FileProvider.getUriForFile(FormularioActivity.this,
                        "br.eti.cvm.agenda.fileprovider",
                        arquivoFoto);
                intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, fotoURI);
                if (intentCamera.resolveActivity(getPackageManager()) != null) {
                    startActivityForResult(intentCamera, CODIGO_CAMERA);
                }
            }
        });
    }

E isso funciona para versoes abaixo de Android 7.0, API 25, ?? se sim como faz ?