Android Development – Publicar no Instagram
14/10/2014
A publicação de fotos e vídeos no Instagram, rede social que consta hoje com mais de 150 milhões de usuários no mundo todo, é muito simples de realizar no Android.
Em nosso Post anterior, demonstramos como capturar uma imagem da galeria do Android ou da câmera do aparelho. Hoje demonstraremos como postar essa imagem, vinda de onde for, no Instagram através de seus Intents.
Para nosso exemplo, vamos demonstrar como enviar uma foto tanto da câmera, como pode ser visto na Listagem-1, quando da galeria, como pode ser visto na Listagem-2.
Listagem-1: capturando foto da Câmera
botaoFotoCamera.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(takePictureIntent, 5678); } });
Listagem-2: capturando foto da Galeria
botaoFotoGaleria.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Selecione uma imagem"), 1234); } });
Para capturar o resultado dos eventos dos botões, você deve sobrescrever o método onActivityResult da sua Activity e verificar se o código de retorno é o que você determinou. A implementação do método onActivityResult para o nosso exemplo, pode ser observada na Listagem-3.
Listagem-3: onActivityResult
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == 1234 && resultCode == RESULT_OK){ Uri uriImagemGaleria = data.getData(); String caminho = ""; if(Build.VERSION.SDK_INT < 19){ caminho = getPath(uriImagemGaleria); imagem = BitmapFactory.decodeFile(caminho); } else{ ParcelFileDescriptor parcelFileDescriptor; try{ parcelFileDescriptor = getContentResolver().openFileDescriptor(uriImagemGaleria, "r"); FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor(); imagem = BitmapFactory.decodeFileDescriptor(fileDescriptor); parcelFileDescriptor.close(); } catch (Exception ex){ Log.e("InstagramActivity", ex.getMessage()); } } Publicar(); } else if(requestCode == 5678 && resultCode == RESULT_OK){ Bundle extras = data.getExtras(); imagem = (Bitmap) extras.get("data"); Publicar(); } } public String getPath(Uri uri) { if( uri == null ) { return null; } String[] projection = { MediaStore.Images.Media.DATA }; Cursor cursor = managedQuery(uri, projection, null, null, null); if( cursor != null ){ int column_index = cursor .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } return uri.getPath(); }
Observem que existe a chamada de um método, Publicar() na implementação da Listagem-3. Este método pode ser observado na Listagem-4 e serve para, enfim, publicar no Instagram.
Listagem-4: publicação no Instagram.
private void Publicar(){ try { Intent share = new Intent(Intent.ACTION_SEND); share.setType("image/*"); String caminhoFoto = Environment.getExternalStorageDirectory() + "/minhasImagens/"; String nomeArquivo = String.valueOf((new Date()).getTime()) + ".jpg"; File arquivo = new File(caminhoFoto); if(!arquivo.exists()){ arquivo.mkdirs(); } File arquivoFoto = new File(caminhoFoto + nomeArquivo); FileOutputStream fos = new FileOutputStream(arquivoFoto); BufferedOutputStream bos = new BufferedOutputStream(fos); imagem.compress(Bitmap.CompressFormat.JPEG, 100, bos); bos.flush(); bos.close(); fos.close(); Uri uri = Uri.fromFile(arquivoFoto); share.putExtra(Intent.EXTRA_STREAM, uri); share.putExtra(Intent.EXTRA_TEXT, "Compartilhar"); share.setPackage("com.instagram.android"); startActivity(Intent.createChooser(share, "Compartilhar no Instagram")); } catch (Exception ex){ Toast.makeText(context, ex.getMessage(), Toast.LENGTH_LONG).show(); } }
Quer ver mais dicas como esta? Acesse o IAI? em site.iai.art.br