A maior rede de estudos do Brasil

Grátis
148 pág.
Apostila de Desenvolvimento Java para Dispositivos Móveis

Pré-visualização | Página 15 de 25

conexão a um Web Service e recepção de dados em JSON
package net.querino.dicionario;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
public class DicionarioActivity extends Activity {
 
 // Variável global da classe que vai armazenar a resposta recebida
 // do Web Service, em formato JSON.
 String respostaJSON;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 }
Android: Desenvolvimento para Dispositivos Móveis
91
 public void onClick(View v) {
 // Inicia a Thread que vai conectar ao Web Service 
 // e obter os dados JSON
 new Consulta().execute(“”);
 }
 
 class Consulta extends AsyncTask<String, Void, Boolean> {
 @Override
 protected void onPostExecute(Boolean result) {
 JSONObject objetoJSON;
 try {
 objetoJSON = new JSONObject(respostaJSON);
 // Aqui é o local onde você deverá usar o objetoJSON para
 // conseguir os dados que precisa.
 // Por exemplo, se o objeto tiver um valor string em uma
 // chave denominada “texto”, você a obterá com:
 // String texto = objetoJSON.getString(“texto”);
 // Se tiver um valor double com um chave “saldo”:
 // double saldo = objetoJSON.getDouble(“saldo”);
 } catch (JSONException e) {
 e.printStackTrace();
 }
 }
 
 @Override
 protected Boolean doInBackground(String... params) {
 // Este objeto StringBuilder será usada para armazenar o texto 
 // JSON que estiver sendo mandado pelo Web Service.
 StringBuilder builder = new StringBuilder();
 HttpClient client = new DefaultHttpClient();
 // MUITO IMPORTANTE: substitua o endereço a seguir pelo do Web 
 // Service que você vai usar, incluindo parâmetros e valores
 HttpGet httpGet = new HttpGet(“http://” +
 “endereco_para_seu_webservice/” +
 “parametro=valor”); 
Android: Desenvolvimento para Dispositivos Móveis
92
 try {
 HttpResponse response = client.execute(httpGet);
 StatusLine statusLine = response.getStatusLine();
 int statusCode = statusLine.getStatusCode();
 // Se a resposta foi válida, ou seja, se o Web Service 
 // está online e mandou algo:
 if (statusCode == 200) {
 HttpEntity entity = response.getEntity();
 InputStream content = entity.getContent();
 BufferedReader reader = new BufferedReader(
 new InputStreamReader(content));
 String line;
 // O laço a seguir vai lendo linha a linha a 
 // resposta do Web Service e guardando em builder.
 while ((line = reader.readLine()) != null) {
 builder.append(line);
 }
 } else {
 // HOUVE ALGUM ERRO! 
 // AVISE O USUÁRIO COM UM TOAST, PELO MENOS!!!
 }
 
 respostaJSON = builder.toString();
 } catch (ClientProtocolException e) {
 e.printStackTrace();
 } catch (IOException e) {
 e.printStackTrace();
 } 
 return true;
 }
 }
}
9.3 Utilizando a câmera para fotos e vídeo
O acesso à câmera do aparelho é realizado por uma Intent. Antes de usá-la, é preciso solicitar a permissão 
de acesso à câmera, incluindo a linha do Quadro 28 ao AndroidManifest.xml.
Android: Desenvolvimento para Dispositivos Móveis
93
Quadro 28 – Linha para utilização da câmera no AndroidManifest.xml
<uses-feature android:name=”android.hardware.camera”
 android:required=”true” />
Tirar e salvar a foto em um aparelho Android é um processo que envolve o uso de várias classes. No có-
digo do Quadro 29, temos uma Activity com um evento de clique de botão que abre a câmera e salva a foto 
obtida no sistema de arquivos do Android.
Quadro 29 – Código completo de uma Activity para tirar e salvar uma foto
package posjava.android.cameraaudio;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity {
 String caminhoParaFoto;
 private File criarArquivoDaFoto() throws IOException {
 String timeStamp = new SimpleDateFormat(“yyyyMMdd_HHmmss”).format(new Date());
 String nomeDoArquivoDaImagem = “JPEG_” + timeStamp + “_”;
 File pastaDeGravacao = Environment.getExternalStoragePublicDirectory(
 Environment.DIRECTORY_PICTURES);
 File imagem = File.createTempFile(nomeDoArquivoDaImagem, “.jpg”, 
 pastaDeGravacao);
 caminhoParaFoto = “file:” + imagem.getAbsolutePath();
 return image;
 }
Android: Desenvolvimento para Dispositivos Móveis
94
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 }
 
 public void onClick(View v) {
 Intent intentParaTirarFoto = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
 if (intentParaTirarFoto.resolveActivity(getPackageManager()) != null) {
 File arquivo = null;
 try {
 arquivo = criarArquivoDaFoto();
 } catch (IOException ex) {
 Toast.makeText(this, “Falha ao gravar a foto.”, Toast.LENGTH_LONG).show();
 }
 if (arquivo != null) {
 intentParaTirarFoto.putExtra(MediaStore.EXTRA_OUTPUT, 
 Uri.fromFile(arquivo));
 startActivityForResult(intentParaTirarFoto, 1);
 }
 } 
 }
}
O processo de gravar um vídeo e visualizá-lo é bastante semelhante. A permissão adicionada ao Androi-
dManifest.xml anteriormente (veja o Quadro 29), também dá acesso à gravação de vídeo. Veja um exemplo 
de como gravar e reproduzir um vídeo no código exibido no Quadro 30.
Quadro 30 – Código completo de uma Activity para gravar e exibir um vídeo
package posjava.android.cameraaudio;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.VideoView;
public class VideoActivity extends Activity {
Android: Desenvolvimento para Dispositivos Móveis
95
 VideoView videoView;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_video);
 
 videoView = (VideoView)findViewById(R.id.videoView1);
 }
 
 public void onClickGravarVideo(View v) {
 Intent takeVideoIntent = 
 new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
 if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
 startActivityForResult(takeVideoIntent, 1);
 }
 }
 
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 if (requestCode == 1 && resultCode == RESULT_OK) {
 Uri uriDoVideo = data.getData();
 videoView.setVideoURI(uriDoVideo);
 }
 }
}
Começamos declarando um objeto global denominado videoView, da classe VideoView. Ele existe na 
nossa interface