Seminário sd android_exemplos

40
Android: Exemplos de código Sistemas Distribuídos Dupla: Camila Pereira dos Santos Calvin Rodrigues da Costa

Transcript of Seminário sd android_exemplos

Page 1: Seminário sd android_exemplos

Android: Exemplos de código Sistemas Distribuídos

Dupla: Camila Pereira dos Santos

Calvin Rodrigues da Costa

Page 2: Seminário sd android_exemplos

Introdução

• Toda classe voltada a aplicações Android precisa ser derivada da classe Activity e possuir o método onCreate como método principal.

Page 3: Seminário sd android_exemplos

Activity

• Uma Activity é um componente que fornece uma tela com a qual os usuários podem interagir durante a execução do aplicativo.

Page 4: Seminário sd android_exemplos

Método onCreate

• O método onCreate invoca o método onCreate da super classe passando o parâmetro savedInstanceState;

• Após invocar o método onCreate da super classe, é invocado o método setContentView.

Page 5: Seminário sd android_exemplos

O método setContentView

• O setContentView é responsável por exibir a tela da aplicação com base nos layouts xml.

Page 6: Seminário sd android_exemplos

O método setContentView II

Page 7: Seminário sd android_exemplos

O método setContentView III

Page 8: Seminário sd android_exemplos

Diretório res

• No diretório res ficam armazenados todos os recursos utilizados pela aplicação;

• Nele, há os subdiretórios drawables, layout e values.

Page 9: Seminário sd android_exemplos

Subdiretórios drawables

• Os subdiretórios drawables guardam imagens;

• A diferença de uso entre um e outro se encontra no quesito resolução.

Page 10: Seminário sd android_exemplos

Subdiretório layout

• O subdiretório layout guarda todas as layouts referentes à aplicação;

• As layouts normalmente são arquivos “.xml”.

Page 11: Seminário sd android_exemplos

Subdiretório layout II

• As Layouts

▫ Nelas encontram-se as informações referentes às telas.

Page 12: Seminário sd android_exemplos

Subdiretório layout III

• O subdiretório layout pode possuir uma variação layout-land de maneira a permitir que sejam apresentadas as telas no formato portrait ou landscape de acordo com a posição do dispositivo.

Page 13: Seminário sd android_exemplos

Subdiretório layout IV

Page 14: Seminário sd android_exemplos

Subdiretório layout V

Page 15: Seminário sd android_exemplos

Subdiretório values

• Nele são armazenados valores estáticos que sirvam de uso para algum arquivo “.xml”;

• Normalmente esses valores estáticos são armazenados no arquivo “strings.xml”.

Page 16: Seminário sd android_exemplos

Subdiretório values II

• Strings

▫ Textos devem ser preferencialmente definidos no arquivo string.xml de forma a facilitar:

o reuso de valores;

a tradução do app para outra linguagem.

Page 17: Seminário sd android_exemplos

Arquivo Manifest

• É no arquivo Manifest em que se encontram as definições referentes ao aplicativo;

• Também define as permissões do aplicativo.

Page 18: Seminário sd android_exemplos

Arquivo Manifest II

Page 19: Seminário sd android_exemplos

Exemplo 2: Uso da câmera [2]

A câmera do Android pode ser utilizada de duas formas diferentes:

• API da câmera no Android

▫ Codificar manualmente

• Uso do aplicativo da câmera

▫ Intent

Page 20: Seminário sd android_exemplos

Importações

import java.io.File; //arquivos

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Locale;

import android.app.Activity;

import android.content.Intent;

import android.content.pm.PackageManager;

import android.graphics.Bitmap; //imagem

import android.graphics.BitmapFactory;

import android.net.Uri; //caminho import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; import android.widget.VideoView;

Arquivo MainActivity.java

Page 21: Seminário sd android_exemplos

Manifest

• Requisito de que o aparelho tenha câmera:

▫ android.hardware.camera <uses-feature android:name="android.hardware.camera" />

• Permissão para escrever no cartão SD:

▫ WRITE_EXTERNAL_STORAGE <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Page 22: Seminário sd android_exemplos

Activity

• Todas as classes de telas herdam Activity e possuem um método onCreate.

public class MainActivity extends Activity {

[...]

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

[...]

Exibe a tela definida no arquivo activity_main.xml

Page 23: Seminário sd android_exemplos

Arquivo Strings

<?xml version="1.0" encoding="utf-8"?>

<resources>

<string name="app_name">SDCamera</string>

<string name="hello_world">Hello - Camera!</string>

<string name="action_settings">Settings</string>

<string name="capturarFoto">Nova foto</string>

<string name="gravarVideo">Gravar vídeo</string>

</resources>

Page 24: Seminário sd android_exemplos

Layout • Activity_main.xml

<LinearLayout

android:layout_width="0dp“

android:layout_height="fill_parent"

android:layout_weight="1"

android:gravity="center“

android:orientation="vertical" >

<!-- Botão de captura-->

<Button

android:id="@+id/btnCapturePicture"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text=“@string/capturarFoto"

android:layout_marginBottom="10dp"/>

Define um id para o botão, que pode ser referenciado na Activity

Page 25: Seminário sd android_exemplos

Layout

<!-- Visualizar imagem -->

<ImageView

android:id="@+id/imgPreview"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:visibility="gone" />

Page 26: Seminário sd android_exemplos

Activity e Layout

• Arquivo R.java, gerado automaticamente, funciona como uma “interface” entre o código Java e o código XML.

• É possível obter um componente definido em um layout:

imgPreview = (ImageView) findViewById(R.id.imgPreview);

videoPreview = (VideoView) findViewById(R.id.videoPreview);

btnCapturePicture =(Button)findViewById(R.id.btnCapturePicture);

Page 27: Seminário sd android_exemplos

Suporte a câmera

Verifica se a câmera está disponível e fecha a aplicação, caso contrário. [...] if (!isDeviceSupportCamera()) { Toast.makeText(getApplicationContext(),“Não há suporte à câmera”, Toast.LENGTH_LONG).show(); finish(); } private boolean isDeviceSupportCamera() { if(getApplicationContext().getPackageManager().hasSystemFeature( PackageManager.FEATURE_CAMERA)) { return true; } else { return false; } }

Page 28: Seminário sd android_exemplos

Captura da imagem

Obtém o botão da tela, definido no arquivo xml da tela. Em seguida, define que o evento de clique deve chamar a função de captura de imagem.

[...]

btnCapturePicture= (Button)= findViewById(R.id.btnCapturePicture);

// Evento de captura de imagem quando clica no botão

btnCapturePicture.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

captureImage();

}

});

Page 29: Seminário sd android_exemplos

Captura da imagem

Cria-se um objeto Intent, que inicia o aplicativo de câmera do Android.

private void captureImage() {

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);

intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

// Inicia o Intent da captura de imagem da câmera

startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);

}

Page 30: Seminário sd android_exemplos

Exibição da imagem

Esse método é chamado após fechar a câmera.

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

// Se for uma captura de imagem

if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) {

if (resultCode == RESULT_OK) {

// A captura funcionou, então exibe e imagem

previewCapturedImage();

}

[...]

}

Page 31: Seminário sd android_exemplos

Exibição da imagem

Exibe a imagem capturada na tela.

Private void previewCapturedImage() {

try {

videoPreview.setVisibility(View.GONE);

imgPreview.setVisibility(View.VISIBLE);

BitmapFactory.Options options = new BitmapFactory.Options();

// diminui o tamanho da imagem, para evitar OutOfMemory Exception

options.inSampleSize = 8;

final Bitmap bitmap = BitmapFactory.decodeFile(fileUri.getPath(),

options);

imgPreview.setImageBitmap(bitmap);

} catch (NullPointerException e) { e.printStackTrace(); }

}

Page 32: Seminário sd android_exemplos

Exemplo 3: Web Services REST [5]

• Web Service que retorna os melhores jogadores de um jogo:

http://www.cheesejedi.com/rest_services/get_big_cheese?level=1.

É feita uma requisição http para o REST em uma thread background. O resultado, é retornado para a thread principal.

Page 33: Seminário sd android_exemplos

Manifest

• Permissão para acessar a internet, para permitir a requisição http para o Web Service.

<uses-permission android:name= “android.permission.INTERNET” />

Page 34: Seminário sd android_exemplos

Importações

• import java.io.IOException;

• import java.io.InputStream;

• import org.apache.http.HttpEntity;

• import org.apache.http.HttpResponse;

• import org.apache.http.client.HttpClient;

• import org.apache.http.client.methods.HttpGet;

• import org.apache.http.impl.client.DefaultHttpClient;

• import org.apache.http.protocol.BasicHttpContext;

• import org.apache.http.protocol.HttpContext;

• import android.app.Activity;

• import android.os.AsyncTask;

• import android.os.Bundle;

• import android.view.View;

• import android.view.View.OnClickListener;

• import android.widget.Button;

• import android.widget.EditText;

Page 35: Seminário sd android_exemplos

Activity

public class MainActivity extends Activity implements OnClickListener {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViewById(R.id.my_button).setOnClickListener(this);

}

@Override

public void onClick(View arg0) {

Button b = (Button)findViewById(R.id.my_button);

b.setClickable(false);

new RequisicaoWSRest().execute();

}

Page 36: Seminário sd android_exemplos

RequisicaoWSRest

• RequisicaoWSRest herda AsyncTask. Essa classe possibilita operações em segundo plano e retornar os resultados para a thread principal.

private class RequisicaoWSRest extends AsyncTask <Void, Void, String>

Page 37: Seminário sd android_exemplos

Mensagens de Log

Métodos para salvar mensagens de log:

Método Descrição

Log.v() verbose

Log.d() debug

Log.i() info

Log.w() warn

Log.e() error

Page 38: Seminário sd android_exemplos

RequisicaoWSRest • Cria um HttpClient que faz a requisição para o endereço do Web

Service. Obtém a resposta e a converte para texto, pelo método getASCIIContentFromEntity.

@Override protected String doInBackground(Void... params) { HttpClient httpClient = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); HttpGet httpGet = new HttpGet( "http://www.cheesejedi.com/rest_services/get_big_cheese.php?puzzle=1"); String text = null; try { HttpResponse response = httpClient.execute(httpGet, localContext); HttpEntity entity = response.getEntity(); text = getASCIIContentFromEntity(entity); } catch (Exception e) { Log.w("RequisicaoREST","Resposta não recebida"); return e.getLocalizedMessage(); } return text; }

Page 39: Seminário sd android_exemplos

RequisicaoWSRest

• O texto retornado pelo Web Service

é definido no campo de texto da tela

protected void onPostExecute(String results) {

if (results!=null) {

EditText et = (EditText)findViewById(R.id.my_edit);

et.setText(results);

}

Button b = (Button)findViewById(R.id.my_button);

b.setClickable(true);

}

Page 40: Seminário sd android_exemplos

Referências Bibliográficas

• [1] Apostila de Android – Programando Passo a Passo. 4ª edição. 2010. Luciano Alves da Silva. Disponível em http://www.apostilaandroid.net/

• [2] http://developer.android.com/guide/topics/media/camera.html

• [3] http://www.androidhive.info/2013/09/android-working-with-camera-api/

• [4] http://www.streamhead.com/android-tutorial-sd-card/

• [5] http://www.techrepublic.com/blog/software-engineer/calling-restful-services-from-your-android-app/1076/

• [6] http://developer.android.com/guide/components/activities.html