Seminário sd android_exemplos
Upcoming SlideShare
Loading in...5
×
 

Seminário sd android_exemplos

on

  • 103 views

 

Statistics

Views

Total Views
103
Views on SlideShare
103
Embed Views
0

Actions

Likes
0
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Seminário sd android_exemplos Seminário sd android_exemplos Presentation Transcript

  • Android: Exemplos de código Sistemas Distribuídos Dupla: Camila Pereira dos Santos Calvin Rodrigues da Costa
  • 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.
  • Activity • Uma Activity é um componente que fornece uma tela com a qual os usuários podem interagir durante a execução do aplicativo. View slide
  • 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. View slide
  • O método setContentView • O setContentView é responsável por exibir a tela da aplicação com base nos layouts xml.
  • O método setContentView II
  • O método setContentView III
  • 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.
  • Subdiretórios drawables • Os subdiretórios drawables guardam imagens; • A diferença de uso entre um e outro se encontra no quesito resolução.
  • Subdiretório layout • O subdiretório layout guarda todas as layouts referentes à aplicação; • As layouts normalmente são arquivos “.xml”.
  • Subdiretório layout II • As Layouts ▫ Nelas encontram-se as informações referentes às telas.
  • 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.
  • Subdiretório layout IV
  • Subdiretório layout V
  • 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”.
  • 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.
  • Arquivo Manifest • É no arquivo Manifest em que se encontram as definições referentes ao aplicativo; • Também define as permissões do aplicativo.
  • Arquivo Manifest II
  • 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
  • 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
  • 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" />
  • 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
  • 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>
  • 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
  • Layout <!-- Visualizar imagem --> <ImageView android:id="@+id/imgPreview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone" />
  • 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);
  • 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; } }
  • 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(); } });
  • 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); }
  • 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(); } [...] }
  • 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(); } }
  • 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.
  • Manifest • Permissão para acessar a internet, para permitir a requisição http para o Web Service. <uses-permission android:name= “android.permission.INTERNET” />
  • 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;
  • 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(); }
  • 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>
  • 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
  • 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; }
  • 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); }
  • 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