Na busca por uma maneira de como enviar um arquivo para impressão de um smartphone Android, surge a dúvida de como faria isso direto da aplicação sem se preocupar como iria ser feito esta conexão com a impressora, ai que surge o Google com suas ferramentas revolucionárias, o Google Cloud Print.

Como a ferramenta já diz, levar a impressão pras nuvens. Ao conectar o seu navegador ‘Google Chrome’ à conta do ‘Google Cloud Print’, ele permite que todas as impressoras que o navegador tenha acesso, sejam jogadas nas núvens, para futuras impressões, e o melhor, de qualquer computador / smarthphone, independente de onde você estiver.
A princípio devemos acessar: http://www.google.com/cloudprint e fazer o login para integrar a conta do google com o cloudprint, caso você não esteja no utilizando o ‘Google Chrome’ que é um fator fundamental para configurar as impressoras que serão usadas nas nuvens, ele irá sugerir para o download.
Feito isso, vá em Opções (Options) -> Opções Avançadas (Under the hood) -> Na última opção faça o login no cloudprint e configure as impressoas que estarão disponívels para uso. “Google Cloud Print lets you access this computer’s printers from anywhere. Sign in to enable.”
Com tudo configurado, vamos ao código.
A princípio a permissão de acesso a INTERNET no Manifest da sua aplicação, para que a Activity que fará a conexão com o google possa mostrar o conteúdo do site no seu webview.
// permissão para uso da internet
<uses-permission android:name="android.permission.INTERNET" />
Basicamente, o código em si é esta chamada de Activity onde o programador irá passar o documento em forma de URI e seu MimeType (Uma lista de tipos pode ser encontrada aqui), e o título no qual o documento terá na lista de arquivos que estão sendo impressos.
Intent printIntent = new Intent(this, PrintDialogActivity.class);
printIntent.setDataAndType(docUri, docMimeType);
printIntent.putExtra("title", docTitle);
startActivity(printIntent);
Um exemplo seria a impressão de um PDF, para demonstração utilizo a biblioteca iText (http://www.itextpdf.com/) que é OpenSource e utilizada em Java e C#. Após adicionar o arquivo .jar ao Build Path do seu projeto no eclipse, basta criar um arquivo no SDcard, lembrando que precisamos de criar uma permissão para esse feito:
// permissão para escrever no armazenamento externo
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
// pega o armazenamento externo
File root = Environment.getExternalStorageDirectory();
// instancia um arquivo que será criado no diretório base do SDCARD
File file = new File(root, "teste.pdf");
// se o arquivo já existir, delete-o
if (file.exists())
file.delete();
// tente criar um arquivo temporário
try {
file.createNewFile();
} catch (IOException e) {
}
// criamos um documento do tipo PDF
Document document = new Document();
try {
// avisamos ao PdfWriter que esse documento será salvo
// na minha instancia de file para que
// ao fechados o documento ele salve o arquivo
PdfWriter.getInstance(document, new FileOutputStream(file));
document.open();
// adicionamos um paragrafo ao documento
document.add(new Paragraph("Hello World!"));
} catch (DocumentException e) {
e.printStackTrace();
}
document.close();
// e finalmente mandamos o arquivo para a Activity que
// fará a comunicação com o Google Cloud Print
Intent printIntent = new Intent(this, PrintDialogActivity.class);
printIntent.setDataAndType(Uri.fromFile(file), "application/pdf");
printIntent.putExtra("title", "PDF para ser impresso");
startActivity(printIntent);
O código da PrintDialogActivity juntamente com seu layout está disponível no site do projeto no google, e não precisa de nenhuma modificação, acesse para maiores informações: http://code.google.com/apis/cloudprint/docs/android.html

home
blog de design do c.e.s.a.r.
Meus parabéns Felipe, belíssimo post.
[]’s
Glauber