Seminário sd android_exemplos

212 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
212
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Seminário sd android_exemplos

  1. 1. Android: Exemplos de código Sistemas Distribuídos Dupla: Camila Pereira dos Santos Calvin Rodrigues da Costa
  2. 2. 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.
  3. 3. Activity • Uma Activity é um componente que fornece uma tela com a qual os usuários podem interagir durante a execução do aplicativo.
  4. 4. 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.
  5. 5. O método setContentView • O setContentView é responsável por exibir a tela da aplicação com base nos layouts xml.
  6. 6. O método setContentView II
  7. 7. O método setContentView III
  8. 8. 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.
  9. 9. Subdiretórios drawables • Os subdiretórios drawables guardam imagens; • A diferença de uso entre um e outro se encontra no quesito resolução.
  10. 10. Subdiretório layout • O subdiretório layout guarda todas as layouts referentes à aplicação; • As layouts normalmente são arquivos “.xml”.
  11. 11. Subdiretório layout II • As Layouts ▫ Nelas encontram-se as informações referentes às telas.
  12. 12. 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.
  13. 13. Subdiretório layout IV
  14. 14. Subdiretório layout V
  15. 15. 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”.
  16. 16. 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.
  17. 17. Arquivo Manifest • É no arquivo Manifest em que se encontram as definições referentes ao aplicativo; • Também define as permissões do aplicativo.
  18. 18. Arquivo Manifest II
  19. 19. 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
  20. 20. 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
  21. 21. 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" />
  22. 22. 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
  23. 23. 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>
  24. 24. 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
  25. 25. Layout <!-- Visualizar imagem --> <ImageView android:id="@+id/imgPreview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone" />
  26. 26. 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);
  27. 27. 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; } }
  28. 28. 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(); } });
  29. 29. 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); }
  30. 30. 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(); } [...] }
  31. 31. 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(); } }
  32. 32. 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.
  33. 33. Manifest • Permissão para acessar a internet, para permitir a requisição http para o Web Service. <uses-permission android:name= “android.permission.INTERNET” />
  34. 34. 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;
  35. 35. 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(); }
  36. 36. 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>
  37. 37. 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
  38. 38. 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; }
  39. 39. 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); }
  40. 40. 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

×