Preciso imprimir algo parecido com um relatório direto do android. Alguém tem uma sugestão de como fazer isso? Tenho que gerar um PDF antes se salvar no dispositivo para impressão? Alguém tem uma sugestão
Preciso imprimir algo parecido com um relatório direto do android. Alguém tem uma sugestão de como fazer isso? Tenho que gerar um PDF antes se salvar no dispositivo para impressão? Alguém tem uma sugestão
Fala ai Bruno, de boa ?
Você quer fazer com que o android execute uma impressora ? Se for isso, sim, você terá que gerar o pdf e solicitar para a sua impressora, que deve estar na rede, imprimir, por exemplo.
Entendi. Eu até consegui gerar o pdf na pasta mas não consigo abrir o arquivo, pois o FileProvider não consegue encontrar o arquivo e está acabando com minha raça.
O arquivo chega a ser criado pois verifiquei manualmente nos diretórios. Coloquei alguns logs pra ver o que acontece mas mesmo assim não consigo entender porque ele não encontra
AndroidManifest.xml
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
filepaths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-files-path name="files" path="."/>
</paths>
criação do arquivo pdf
File docsFolder = new File(Environment.getExternalStorageDirectory()+"/compras");
if (!docsFolder.exists()) {
docsFolder.mkdir();
Log.i(TAG, "Created a new directory for PDF");
}
comprovante = new File(docsFolder.getAbsolutePath(),"comprovante.pdf");
Tentativa de carregar o arquivo
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri uri = FileProvider.getUriForFile(ComprasComprovanteActivity.this, BuildConfig.APPLICATION_ID + ".provider",comprovante);
O erro
Failed to find configured root that contains /storage/emulated/0/compras/comprovante.pdf
Tentei mudar algumas coisas mas continua o problema
Criação do pdf mudei o modo de buscar o caminho do arquivo.
File docsFolder = new File(this.getExternalFilesDir(null) + "/compras");
if (!docsFolder.exists()) {
docsFolder.mkdir();
Log.i(TAG, "Created a new directory for PDF");
}
comprovante = new File(docsFolder.getAbsolutePath(),"comprovante.pdf");
Ao carregar o arquivo
Uri uri = getUriForFile(ComprasComprovanteActivity.this, "sistema.com.br",comprovante);
Ao criar o arquivo ele gera no caminho:
/storage/emulated/0/Android/data/sistema.com.br/files/compras/comprovante.pdf
E ao carregar ele tenta carregar :
content://sistema.com.br/files/compras/comprovante.pdf
Mas no app da mensagem que o arquivo nao foi encontrado e no log da msg
Permission Denial: reading android.support.v4.content.FileProvider uri content://sistema.com.br/files/compras/comprovante.pdf from pid=10369, uid=10145 requires the provider be exported, or grantUriPermission()
Eu não estou sabendo mais como resolver
Depois de muita pesquisa, confusão e raiva eu resolvi simplesmente colocando dois atributos de permissão no intent.
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
sei que é difícil o pessoal responder na hora, mas como estava com pressa fiquei o dia inteiro nisso. mais um aprendizado