Escolar Documentos
Profissional Documentos
Cultura Documentos
Desenvolvimento Android Basico
Desenvolvimento Android Basico
Bsico
(por Maurcio Salamon - http://mauriciosalamon.com.br)
Android
Contedo
1. Introduo plataforma Java ................................................................................................................. 4
1.1. Comandos bsicos ........................................................................................................................ 6
1.2. Tipos de dados .............................................................................................................................. 7
1.3. Operadores ................................................................................................................................... 8
1.4. Operadores relacionais ................................................................................................................. 9
1.5. Comentrios ............................................................................................................................... 10
1.6. Pacotes, Classes e Objetos ......................................................................................................... 11
1.7. Modificadores de acesso e encapsulamento ............................................................................... 17
1.8. Colees ..................................................................................................................................... 19
1.9. Padro de projeto Observer, Eventos e Listeners ....................................................................... 21
1.10.
Android
Android
Android
Android
Android
Tipo
Bits
Bytes
Mnimo
Mximo
Ex.:
byte
-27
27-1
99
short
16
-215
215-1
9999
int
32
-231
231-1
999999999
long
64
-263
263-1
99999999999999
float
32
99999999.99
double
64
- 9999999999999.99
verdadeiro/falso true/false
True
boolean
char
String
caractere
caracteres
abc
Android
1.3. Operadores
Operador
Descrio
Ex.:
Atribuio
int x = 1; // x 1
Adio
int x = 9+1; // x 10
Subtrao
int x = 4-3; // x -1
Diviso
int x = 4/2; // x 2
Multiplicao
int x = 1*5; // x 5
Mdulo
int x = 4%2; // x 0
+=
int x = 1;
x+= 10; // x 11
-=
int x = 10;
x-= 5; // x 5
++
Adio prpria
int x = 1;
x++; // x 2
--
Subtrao prpria
int x = 1;
x--; // x 0
Android
Operador
Descrio
Ex.:
==
Igual
if(x == 1)
!= ou <>
Diferente
&&
if(x != 1 && x != 0)
||
Ou
if(x != 1 || x == 0)
<
Menor
if(x < 1)
>
Maior
if(x > 1)
<=
Menor ou igual
if(x <= 1)
>=
Maior ou igual
if(x <= 1)
Android
1.5. Comentrios
Os comentrios em Java podem ser escritos em linha:
// isto um comentrio
Ou em blocos:
/* este um comentrio em blocos
* utilizado para comentrios longos
* ou gerao de documentao automtica */
10
Android
Pessoa {
String nome;
int idade;
float altura;
float peso;
// construtor padro
public Pessoa(){}
// construtor atribuindo nome
public Pessoa(String nome) {
this.nome = nome;
}
public void falar() {
System.out.println(Ol, meu nome + this.nome + .);
}
}
11
Android
ou
public class Main {
public static void main(String[] args) {
Pessoa pessoa1 = new Pessoa(Jo);
pessoa1.falar();
// exibe no console Ol, meu nome Jo.
}
}
12
Android
13
Android
14
Android
Java conta, tambm, com Interface, um tipo de Classe que no possui contedo
implementado, apenas chamadas de declaraes. Interfaces so, em partes, uma soluo
encontrada para a emulao de herana mltipla, recurso no implementado em Java.
Dessa forma, uma Casse Java pode herdar itens da Classe pai e ainda possuir itens de
uma outra Classe modelo. A Interface mais comum utilizada em Java a Runnable,
utilizada em threads e que possui a chamada de mtodo run(), implementado na classe
implementada. Por exemplo:
public class Relogio implements Runnable {
// mtodo de implementao obrigatria derivado do Runnable
public void run(){
// passa as horas
}
}
Por exemplo:
15
Android
16
Android
17
Android
return this.peso;}
}
public class Main {
public static void main(String[] args) {
Pessoa pessoa1 = new Pessoa();
pessoa1.nome = Jo;
//pessoa1.peso = 70; - no funciona
pessoa1.setPeso(70); // funciona
System.out.println(Ol, meu peso +
pessoa1.getPeso().toString() + .);
}
}
18
Android
1.8. Colees
Tipo de Coleo
Classe
Tipo de Mtodo
Mtodo
Genrico
Collection
Adio
Remoo
Acesso
Pesquisa
Atributos
add(Object elemento)
remove(Object elemento)
clear()
iterator()
contains(Object elemento)
size()
Adio
Remoo
Acesso
remove(int index)
get(index)
listIterator
(iterador que pode andar para trs)
indexOf(Object elemento)
Lista
Vector
ArrayList
LinkedList
Pesquisa
Conjunto
Mapa
HashSet
TreeSet
HashMap
TreeMap
Remoo
remove(Object key)
clear()
get(Object key)
(Isso tambm "pesquisa")
Set entrySet()
(retorna os itens como conjunto)
Set keySet()
(retorna as chaves como conjunto)
Collection values()
(retorna os valores como Collection)
get(Object key)
(Isso tambm "acesso")
Acesso
Pesquisa
19
Android
20
Android
21
Android
22
Android
23
Android
24
Android
25
Android
26
Android
Para utilizar esta exceo, basta realizar a chamada ao mtodo dentro do bloco
try e o cdigo de tratamento dentro do bloco catch.
27
Android
28
Android
1,1%
1.6 Donut
1,4%
2.1 Eclair
11,7%
2.2 Froyo
45,3%
2.3.x Gingerbread
38,7%
3.x.x Honeycomb
1,8%
0%
29
Android
30
Android
31
Android
32
Android
33
Android
2.3. HelloWorld!
Como primeiro projeto e para ambientao no Eclipse, cria-se o projeto padro
Hello World. Na rea esquerda do ambiente existe o explorador de projetos. Basta
abrir o menu flutuante do projeto e selecionar a opo New -> Android Project.
34
Android
35
Android
36
Android
37
Android
</ingredientes>
<instrucoes>
<passo>Misture todos os ingredientes, e dissolva
bem.</passo>
<passo>Cubra com um pano e deixe por uma hora em um local
morno.</passo>
<passo>Misture novamente, coloque numa bandeja e asse num
forno.</passo>
</instrucoes>
</receita>
38
Android
39
Android
40
Android
Feito isso, basta utilizar a opo Run ou finalizar e selecionar a partir do menu
suspenso, em Run As, a configurao recm criada.
41
Android
42
Android
Android
44
Android
45
Android
46
Android
47
Android
48
Android
3. Conceitos Bsicos
Para construir um aplicativo alm do HelloWorld necessrio conhecer um
pouco mais sobre os componentes fundamentais do Android.
Activities: classes (Activity) responsveis pelo cdigo back-end de uma
interface grfica, onde tudo comea na aplicao;
Services: classes (Service) responsveis por cdigos a serem executados por
tempo maior, em segundo plano, sem a necessidade de interveno por parte do usurio;
Content Provider: no Android, no possvel acessar contedo de outros
aplicativos diretamente a partir de um aplicativo terceiro. Para resolver isso, existe esta
classe que fornece os contedos como, por exemplo, o acesso galeria de fotos ou
agenda de contatos, atravs de chamadas e URI (Uniform Resource Identifier)
especficos. possvel, ainda, implementar provedores de contedo prprios para acesso
externo;
Intent e IntentFilter: a classe Intent funciona (como nome sugere, inteno)
como uma chamada permisso de execuo de ao. Toda ao solicitada ao Android
para executar um Intent, como a transio entre Activity, realizao de uma
chamada telefnica ou acesso a um ContentProvider. IntentFilter, por sua vez,
serve para predefinir chamadas para Intents especficos atravs de constantes,
indicando quais recursos a atividade tem interesse em utilizar;
Processos e Threads: por padro, o sistema Android gerencia toda a aplicao em
um nico processo. Em alguns momentos pode ser interessante criar processos
separados para algumas atividades, a fim de que a quebra dela no interfira na quebra
do sistema. J a concorrncia de cdigo (Thread) funciona como uma nica
concorrncia de interface, podendo ser necessrio separar alguns processamentos dela.
49
Android
50
Android
51
Android
52
Android
53
Android
3.2. Service
Um servio (Service), semelhantemente a uma atividade, tambm possui um
ciclo de vida, porm este vlido at o sistema necessitar de memria, caso no haja um
pedido de interrupo previsto.
54
Android
55
Android
extends Service {
// indica o comportamento do servio
// interface para os clientes amarrados
// indica que o service pode ser amarrado
@Override
public void onCreate() {
// servio criado
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
// service iniciado pelo startService()
return mStartMode;
}
@Override
public IBinder onBind(Intent intent) {
// cliente conectado ao servio pelo bindService()
return mBinder;
}
@Override
public boolean onUnbind(Intent intent) {
// todos os clientes so desamarrados pelo unbindService()
return mAllowRebind;
}
@Override
public void onRebind(Intent intent) {
// cliente conectado ao servio novamente atravs do
bindService(), depois que o onUnbind() foi chamado
}
@Override
public void onDestroy() {
// o service finalizado e destrudo
}
}
56
Android
57
Android
3.3. ContentProvider
ContentProvider uma das partes mais importantes no estudo de arquitetura
de aplicaes Android, pois ele responsvel pela comunicao saudvel entre apps. O
sistema operacional da Google foi construdo com base em algumas normas de boas
prticas, dentre as quais consta que o ideal que a persistncia de um programa seja
transparente, tanto ao cdigo-fonte de negcio do prprio programa quanto a
programas externos. Dessa forma, no possvel acessar um banco de dados de uma
aplicao externa diretamente e a que entram os provedores de contedo.
58
Android
59
Android
60
Android
61
Android
@Override
public void handleMessage(Message msg) {
pd.dismiss();
tv.setText(pi_string);
}
};
}
62
Android
3.5. Manifesto
Conhecidos os principais elementos de uma estrutura de cdigo Android, pode-se
estudar o arquivo de manifesto da aplicao. Este arquivo responsvel por definir as
informaes vitais para o app, como identificadores, verses, permisses de acesso
externo e definir quais elementos so presentes nesta aplicao, como atividades,
servios, provedores de contedo e filtros de intenes.
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<uses-permission />
<permission />
<permission-tree />
<permission-group />
<instrumentation />
<uses-sdk />
<uses-configuration />
<uses-feature />
<supports-screens />
<compatible-screens />
<supports-gl-texture />
<application>
<activity>
<intent-filter>
<action />
<category />
<data />
</intent-filter>
<meta-data />
</activity>
<activity-alias>
<intent-filter> . . . </intent-filter>
<meta-data />
</activity-alias>
<service>
<intent-filter> . . . </intent-filter>
<meta-data/>
</service>
<receiver>
<intent-filter> . . . </intent-filter>
<meta-data />
63
Android
</receiver>
<provider>
<grant-uri-permission />
<meta-data />
</provider>
<uses-library />
</application>
</manifest>
64
Android
4. Interface Grfica
Com os aplicativos de smartphones e tablets cada vez mais integrados web, a
catlogos e ao conceito de armazenamento de informaes em nuvem, um dos principais
elementos de um app a apresentao grfica. Tanto em jogos, quanto em catlogos e
em aplicativos coorporativos ou de produtividade, a direo de arte converge para
elementos mais limpos e de navegao mais intuitiva, atingindo diversos nveis de
usurios, desde os mais novatos aos mais experientes.
O Android SDK combinado com o ADT possui recursos e bibliotecas de enorme
qualidade para construo de uma arquitetura de layout moderna e representativa. A
construo a partir destes recursos como uma mistura entre as interfaces Swing e
HTML (web), suportando a construo de layouts em tabela, em camadas e atributos de
posicionamento, controle de bordas, imagens, cores, e diversos componentes visuais.
Como j visto, a arquitetura de um aplicativo Android Java possui elementos de
layout em XML, carregados, geralmente, a partir de uma atividade. Ao editar um
arquivo desse tipo com o Eclipse, com o ADT, possvel visualizar tanto o cdigo texto
(XML), quanto a edio visual, onde possvel adicionar componentes e controlar os
layouts a partir de drag and drop.
65
Android
possvel notar basicamente trs blocos principais para arquitetura de tela no ADT.
A parte principal, o editor, composta de uma aba para edio visual (Graphic
Layout) e outra de cdigo (nomeDoArquivo.xml). Na guia de edio visual,
possvel observar uma barra de componentes visuais e uma rea de montagem de tela.
possvel, ento, arrastar um componente para a rea de montagem. Cada modificao
feita no editor visual automaticamente carregada no editor de texto e vice e versa.
Alm disso, possvel observar uma barra lateral contendo a exibio de hierarquia
de componentes em rvore e um bloco, talvez o principal, de edio de propriedades do
componente. Ao selecionar um componente especfico, so exibidas neste bloco as
propriedades referentes a ele, como alinhamento, posicionamento, cores, textos e o ID do
componente.
Por padro, a propriedade ID do componente composta de um valor em sequncia
(ex.: @+id/button1). importante manter o valor at a primeira barra (/),
alterando apenas o contedo final, o ID em si ( button1, no caso). Isto faz com que, no
componente de referncias gerado automaticamente (R.class), seja adicionada uma
referncia a este objeto, podendo ser utilizada a chamada direta (como R.id.button1).
Cada componente de layout derivado de View(widgets) ou ViewGroup, sendo
que um ViewGroup pode ser composto de View ou de outros ViewGroup, na
quantidade que for necessria para construir um layout.
66
Android
4.1. Layouts
Existem diversos tipos de arquitetura de layouts em Java e em HTML, e algumas
das principais esto presentes no desenvolvimento Android.Os containers de layout so
componentes derivados de ViewGroup. Dentre os principais tipos de layout de uma
arquitetura de tela Android, pode-se destacar os seguintes:
LinearLayout o layout utilizado por padro nos componentes XML criados.
Seu principal objetivo montar os elementos em forma corrente, sendo da esquerda para
a direita em layout horizontal e de cima para baixo em layout vertical. A orientao do
layout definida pela propriedade orientation.
Este estilo de layout pode ser til em casos de design de tela simples, com
elementos ocupando reas completas de largura ou altura (dependendo da orientao
especificada), pois ele respeita automaticamente as margens e os alinhamentos perante
outras View. possvel definir o alinhamento dos componentes na edio dos layouts
Android, atravs da propriedade gravity. Atravs da propriedade layout_weight
possvel organizar os elementos por pesos (prioridades), a fim de algumas Views
ocuparem maior ou menor espaamento em tela (o padro 0).
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<Button
android:id="@+id/bAdd"
android:layout_width="wrap_content"
67
Android
android:layout_height="wrap_content"
android:text="Iniciar Thread" android:layout_weight="0"/>
<TextView
android:id="@+id/tv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="" />
</LinearLayout>
68
Android
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 2" android:visibility="invisible"/>
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 3" />
</FrameLayout>
69
Android
android:layout_height="wrap_content"
android:layout_x="39dp"
android:layout_y="58dp" >
<requestFocus />
</EditText>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="208dp"
android:layout_y="119dp"
android:text="Button" />
</AbsoluteLayout>
70
Android
android:layout_height="fill_parent" >
<TimePicker
android:id="@+id/timePicker1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/timePicker1"
android:text="TextView" />
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView1" >
<requestFocus />
</EditText>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/editText1"
android:text="Button" />
</RelativeLayout>
71
Android
72
Android
73
Android
Componente
Gallery
GridView
ListView
ScrollView
Spinner
SurfaceView
TabHost
ViewFlipper /
ViewSwitcher
Descrio
Contm uma lista de imagens (suportando roalgem para direita e
esquerda)
Contm uma grade com rolagem e esta contm linhas e colunas
Possui uma lista de View (coluna nica)
Coluna nica de elementos (View ou ViewGroups) com rolagem
vertical
Semelhante uma caixa de seleo, realiza rolagem horizontal ou
vertical, exibindo um nico item por vez, como uma linha de texto
Container semelhante a uma superfcie de desenho, utilizado para
desenhar pixels ao invs de widgets, mesmo assim suportando
componentes dispostos acima
Componente armazenador de abas, pronto para receb-lascom
suporte a eventos das mesmas
Lista de exibio nica (um item por vez) que pode ser configurado
para trocar componentes, como um slideshow
74
Android
android:id="@+id/spinner1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"/>
75
Android
76
Android
77
Android
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:text="TextView" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView1"
android:text="Button" />
<ImageButton
android:id="@+id/imageButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/button1"
android:src="@android:drawable/btn_star_big_off" />
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/imageButton1" >
<requestFocus />
</EditText>
<CheckBox
android:id="@+id/checkBox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/editText1"
android:text="CheckBox" />
<RadioButton
android:id="@+id/radioButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
78
Android
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/checkBox1"
android:text="RadioButton" />
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/radioButton1" >
<RadioButton
android:id="@+id/radio0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="RadioButton" />
<RadioButton
android:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="RadioButton" />
<RadioButton
android:id="@+id/radio2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="RadioButton" />
</RadioGroup>
<ToggleButton
android:id="@+id/toggleButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/radioGroup1"
android:text="ToggleButton" />
</RelativeLayout>
As principais propriedades que podem ser utilizadas nos componentes de tela so:
id - identificador do componente, usado para cham-lo a partir de referncias;
79
Android
80
Android
4.3. Menus
Existem trs tipos de menus para aplicaes Android. O menu de opes aberto
ao utilizar o boto correspondente abertura do menu (geralmente boto fsico) e
referente ao menu principal da atividade em execuo. J o menu de contexto aberto
ao tocar e manter pressionado sobre um componente. O menu suspenso semelhante ao
menu de contexto, mas aberto automaticamente ao simples toque em um componente
que o executa (como visto no exemplo, utilizado pelo Spinner).
Para criar um menu de opes, podem ser feitas duas implementaes. A primeira,
a partir de um menu gerado em XML (armazenado em res/menu/) e amarrado
atividade a partir do comando inflate().
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/new_game"
android:icon="@drawable/ic_new_game"
android:title="@string/new_game" />
<item android:id="@+id/help"
android:icon="@drawable/ic_help"
android:title="@string/help" />
</menu>
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.game_menu, menu);
return true;
}
@Override
81
Android
82
Android
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo)
item.getMenuInfo();
switch (item.getItemId()) {
case R.id.edit:
editNote(info.id);
return true;
case R.id.delete:
deleteNote(info.id);
return true;
default:
return super.onContextItemSelected(item);
}
}
83
Android
84
Android
85
Android
4.5. Notificaes
Uma das vantagens do sistema operacional Android a qualidade da sua
multitarefa. Para melhor controle das tarefas, a interface contm uma barra de tarefas
(tambm chamada de barra de status), por padro situada na parte superior da tela.
Com um gesto de deslize com o dedo para baixo, possvel expandir esta barra e
visualizar os detalhes das aplicaes abertas. Os elementos na barra de status do
Android so chamados de notificaes e servem para, dentre outras coisas, alertar o
usurio sobre alguma pendncia em alguma aplicao, ou simplesmente avisar sobre
alguma novidade.
Utiliza-se notificao ao invs de janelas de dilogo quando uma aplicao,
rodando em segundo plano, deseja comunicar-se com o usurio sem interromper a
atividade dele no momento, dando a ele a liberdade de responder aplicao dona da
notificao no momento em que desejar.
86
Android
public
public
public
public
public
public
public
public
public
static
static
static
static
static
static
static
static
static
final
final
final
final
final
final
final
final
final
int TIPO_ACTIVITY = 1;
int TIPO_BROADCAST = 2;
int TIPO_SERVICE = 3;
String INTENT_STRING_MSG_STATUS = "MSGs";
String INTENT_STRING_MSG = "MSG";
String INTENT_STRING_TITULO = "titu";
String INTENT_LONG_QUANDO = "WHEN";
String INTENT_INT_ICONE = "icone";
String INTENT_INT_FLAGS = "FLS";
87
Android
88
Android
89
Android
image.setImageResource(R.drawable.android);
TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("Este um Toast personalizado!");
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
toast.show();
90
Android
91
Android
</LinearLayout>
92
Android
lp.setMargins(x, y, 0, 0);
selected_item.setLayoutParams(lp);
break;
default:
break;
}
return true;
}
});
ImageView img = (ImageView)findViewById(R.id.imageView1);
img.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getActionMasked())
{
case MotionEvent.ACTION_DOWN:
offset_x = (int)event.getX();
offset_y = (int)event.getY();
selected_item = v;
break;
default:
break;
}
// retorna falso para evitar indesejados MotionEvents
// e dar ao pai a chance de utilizar MotionEvent
return false;
}
});
A partir deste cdigo, podem ser utilizados outros mtodos de toque, medio de
coordenadas, alm de definir outros containers, definir sobreposio e gerar
componentes melhores de UX (User Experience), como listas em duas colunas com
atribuio por arrastar e soltar.
93
Android
4.7. Recursos
Em todos os elementos de layout utilizados at agora, no back-end possvel realizar
acesso direto atravs da classe de referncias R.class. Esta classe chamada de
Resource, pois referencia todos os elementos XML utilizados na aplicao. Estes
elementos so armazenados dentro do diretrio res/.
94
Android
95
Android
5. Conceitos Avanados
Aps o aprendizado sobre o desenvolvimento bsico em Android, pode-se
aprofundar nos conhecimentos mais avanados.
Dentre as principais execues que podem ser realizadas em Android, dependendo
do dispositivo anfitrio da verso do sistema, deve ser considerado o uso do
acelermetro e do giroscpio (sistemas de controle de posicionamento e angulao do
dispositivo), o suporte a GPS (Global Positioning System), o suporte nativo a banco de
dados SQL (Structured Query Language), no caso o SQLite, etc.
Nos itens a seguir, o detalhamento destes principais recursos.
96
Android
No exemplo acima, o app requer que sejam acessadas informaes de contato, que
tenha acesso Internet completo, que possa gerenciar contedo no carto de memria
SD, que possa modificar o estado do telefone (como com rede, sem rede e ocupado), e
escrever um novo nome de Access Point.
importante entender que, ao usurio aceitar as permisses de acesso de um app
ao realizar o download, ele est automaticamente isentando a Google de qualquer culpa
em problemas gerados por ele. Por exemplo, se um aplicativo realiza ligaes telefnicas
em segundo plano e o usurio aceitou essas permisses (contanto que estivessem
97
Android
98
Android
99
Android
100
Android
101
Android
102
Android
A partir desta Classe auxiliar, pode-se realizar uma chamada simples de instncia
execuo de comandos para o SQLite.
DataBaseHelper dbHelper = new DataBaseHelper(this);
dbHelper.open();
SQLiteDatabase dbCon = dbHelper.getDB();
int id = 999;
Cursor cursor = dbCon.rawQuery("SELECT * FROM nomeTabela WHERE (id =
?)",new String[]{String.valueOf(id)});
startManagingCursor(cursor);
if(cursor.getCount()>0)
{
cursor.moveToFirst();
String valorColuna =
cursor.getString(cursor.getColumnIndex("nomeColuna"));
}
J para insero de dados, por exemplo, pode ser utilizado o seguinte cdigo:
103
Android
importante sempre depois de utilizar uma conexo com o banco de dados fechla, o que pode ser realizado com o comando dbHelper.close();.
Como em outras plataformas de desenvolvimento SQL, tambm possvel realizar
a manuteno do banco de dados visualmente, atravs da visualizao de uma tabela,
com linhas e colunas representando a estrutura e os registros de uma entidade no banco
de dados (http://www.softsland.com/sqlite_expert_personal.html), atravs de linha de
cdigo em Shell com o ADB (Android Debug Bridge,
http://developer.android.com/guide/developing/tools/adb.html), ou at mesmo atravs de
um aplicativo instalado diretamente no dispositivo
(https://play.google.com/store/apps/details?id=com.speedsoftware.sqleditor&hl=pt_BR).
A documentao completa do SQLite em Android pode ser encontrada em:
http://developer.android.com/reference/android/database/sqlite/packagesummary.html
A documentao completa dos comandos SQL pode ser encontrada em:
http://www.sqlite.org/lang.html
104
Android
105
Android
bos.flush();
bos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Para realizar postagem de contedo em formato de texto para uma pgina web
(atravs de mtodos POST/GET), utiliza-se os componentes HttpClient e HttpPost.
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(serverUrl + "android_post.php");
try {
List<BasicNameValuePair> nameValuePairs = new
ArrayList<BasicNameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("id",0));
106
Android
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
107
Android
108
Android
109
Android
110
Android
5.6. Bluetooth
Em algumas aplicaes, pode ser necessria a transmio de dados entre
dispositivos, seja uma transferncia de arquivo ou apenas texto. Isto pode ser realizado
ativando o recurso de Bluetooth do Android, que tambm conta com uma biblioteca de
Classes especficas para este tipo de transferncias.
A utilizao do bluetooth como recurso no Android requer a seguinte definio de
uma solicitao de permisso no manifesto.
<uses-permission
android:name="android.permission. BLUETOOTH" />
111
Android
No exemplo acima, a procura foi pelo nome do servidor bluetooth, que pode no
ser nico. Por isso, o ideal realizar a busca pelo endereo MAC do dispositivo do
servidor. Com o servidor pareado, necessrio realizar o cdigo de comunicao
bluetooth dentro de uma Thread, pois este tipo de conexo bloquevel e depende de
respostas do servidor. Para acessar o dispositivo atravs da Thread, necessrio
definir uma varivel como final, recebendo o dispositivo pareado.
final BluetoothDevice computer = server;
Thread connector = new Thread(){
public void run() {
// Identificador nico do Servidor
UUID ident = UUID.fromString("879c3537-ae66-4013-a6779b7e5339d13c");
try {
// Socket de Conexo
BluetoothSocket s =
// Conexo a Partir do Identificador nico
computer.createRfcommSocketToServiceRecord(ident);
} catch (IOException e) { // Erro de Entrada e Sada de Dados
// Mensagem de Erro ao Usurio
alert("Erro de Conexo");
finish();
}
// Conectar ao Servidor
s.connect(); // Execuo Bloqueante
// Fluxos de Entrada e Sada de Dados
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
}
};
112
Android
113
Android
5.7. Sensores
O sistema operacional Android, assim como muitos dos dispositivos que o possuem
instalado, suporta alguns recursos de sensores, dentre os quais pode-se destacar o
acelermetro (responsvel pela medio de acelerao aplicada a movimentos) e o
giroscpio (responsvel pela medio de movimentos de giro/inclinao). Estes sensores
so utilizados para diversas aplicaes, como jogos, ajustes de tela, melhorias de
usabilidade, etc.
114
Android
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
};
private void updateOrientation(float heading, float pitch, float
roll) {
// Update the UI
}
115
Android
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
public void onSensorChanged(SensorEvent event) {
}
}
116
Android
117
Android
118
Android
documentao, a Google conquista cada vez mais um espao maior entre os dispositivos
mveis, sejam smartphones ou tablets, alm de mais usurios utilizarem de forma mais
profunda seu sistema operacional e desenvolvedores se interessarem pela plataforma
perante os considerados rivais de mercado.
Android j uma tima opo de desenvolvimento, tornando-se uma ferramenta
mais necessria a cada dia, tanto para usurios domsticos que procuram muitas opes
de produtividade e entretenimento para seu dia-a-dia, quanto para grandes corporaes
que buscam novas estratgias de marketing. Conquistando mais fabricantes de
dispositivos, adaptando-se s tendncias de mercado e conquistando novos
desenvolvedores, o Android uma ferramenta poderosa que vale muito a pena ser
estudada.
119
Android
4. Exerccios
Este captulo da apostila contm os exerccios para estudo e fixao referentes aos
demais respectivos captulos.
1) Introduo Java
1.1)
120
Android
121
Android
a) Opes;
b) Sair;
4.6) Implementar sistema de tabulao de layouts no aplicativo, deixando todas
as opes de tela visveis, utilizando TabView;
5) Conceitos Avanados
5.1) Implementar um layout contendo visualizao de mapa:
a) Pesquisa de endereo no mapa;
b) Overlays contendo apontadores para localizao de tarefas;
c) No evento de pressionar sobre o mapa, abrir tela de cadastro de tarefa
para realizar associao com a lozalizao informada;
5.2) Converter a estrutura de banco de dados do aplicativo em ContentProvider;
5.3) Implementar sistema de preferncias de usurio para armazenamento das
informaes no menu opes;
5.4) Implementar sistema de armazenamento de imagem tarefa, realizando a
utilizao da cmera atravs de um dos dois mtodos apresentados:
a) Por Intent;
b) Por SurfaceView;
5.5) Implementar compartilhamento de tarefa:
a) Por E-mail;
b) Por Facebook;
122
Android
Anotaes
__________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
123
Android
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
124