Seminário sd android_exemplos

  • 59 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
59
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
1
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Android: Exemplos de código Sistemas Distribuídos Dupla: Camila Pereira dos Santos Calvin Rodrigues da Costa
  • 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. Activity • Uma Activity é um componente que fornece uma tela com a qual os usuários podem interagir durante a execução do aplicativo.
  • 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. O método setContentView • O setContentView é responsável por exibir a tela da aplicação com base nos layouts xml.
  • 6. O método setContentView II
  • 7. O método setContentView III
  • 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. 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. Subdiretório layout • O subdiretório layout guarda todas as layouts referentes à aplicação; • As layouts normalmente são arquivos “.xml”.
  • 11. Subdiretório layout II • As Layouts ▫ Nelas encontram-se as informações referentes às telas.
  • 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. Subdiretório layout IV
  • 14. Subdiretório layout V
  • 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. 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. Arquivo Manifest • É no arquivo Manifest em que se encontram as definições referentes ao aplicativo; • Também define as permissões do aplicativo.
  • 18. Arquivo Manifest II
  • 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. 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. 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. 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. 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. 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. Layout <!-- Visualizar imagem --> <ImageView android:id="@+id/imgPreview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone" />
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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