Você está na página 1de 31

Android Extra

Instrutor
Informaes Extras
https://market.android.com/details?id=com.codtech.android.intentplayground
Service

http://developer.android.com/reference/android/app/Service.
html

Service um componente de aplicao com dois objetivos:


Executar longas operaes enquanto no estiver interagindo
com o usurio
Prover funcionalidade para outra aplicao
Services rodam na Thread Principal do programa.
Caso seu Service precise executar algo pesado na CPU (tocar
msica), ele dever ser permutado para outro processo.
O que um Service?
Um Service no um processo separado. O objeto Service no est
rodando em seu prprio processo, a menos que especificado.
Ele executa no mesmo processo como parte da aplicao.
Um Service no uma Thread. Ele no feito para desenvolver
tarefas fora do contexto principal.
Um service uma indicao para o aplicativo dizer ao sistema sobre
algo que ele quer que seja feito em pano de fundo, mesmo quando o
usurio no est diretamente interagindo com a aplicao.
Um service uma indicao para o aplicativo expor algumas de suas
funcionalidades para outros aplicativos.
Exemplo de Service
Um dos usos mais comuns de um Service um componente
secundrio executando ao longo de outras partes do aplicativo, no
mesmo processo como todos os outros componentes. Todos os
componentes da aplicao executam no mesmo processo a menos
que sejam explicitamente declarados fora.
Quando o Service est rodando no mesmo processo, possvel fazer
um casting para o IBinder.

Disponvel no Moodle:
Android_05_Service.docx
Content Provider
http://developer.android.com/guide/topics/providers/content-providers.html

Content Providers armazenam e recuperam dados e os tornam acessveis para


outras aplicaes.
So o nico caminho para compartilhar dados entre aplicaes.
No h rea de armazenamento comum que todos os pacotes Android possam
acessar.
Existe um nmero de Content Providers de tipos comuns: Audio, Video, Imagens,
Contatos...
Para tornar seus dados pblicos, necessrio criar seu prprio Content Provider,
criando uma subclasse.
Quando uma busca iniciada, o sistema Android identifica o Content Provider que
est relacionado com a busca e verifica se ele est funcionando.
Content Provider

Os Content Provider expem seus dados atravs de uma tabela simples de


banco de dados, onde cada linha um registro e cada coluna uma informao
de um tipo particular:
_ID NUMBER NUMBER_KEY LABEL NAME TYPE

13 (425) 555 6677 425 555 6677 Kirkland office Bully Pulpit TYPE_WORK

44 (212) 555-1234 212 555 1234 NY apartment Alan Vain TYPE_HOME

45 (212) 555-6657 212 555 6657 Downtown office Alan Vain TYPE_MOBILE

53 201.555.4433 201 555 4433 Love Nest Rex Cars TYPE_HOME


Content Provider
Cada registro possui uma identificao numrica exclusiva (_ID).
A busca retorna um Cursor que pode caminhar entre os registros e entre as
colunas para ler contedos de cada campo. H metodos especializados para
ler cada tipo de informao.
Para ler um campo, necessrio saber qual o tipo de dado que ele
contm.
URI (Universal Resource Indicator)
Cada Content Provider expe uma URI pblica que identifica
exclusivamente um conjunto de informaes.
O Content Provider que controla multiplos conjuntos (tabelas) expe uma
URI separada para cada um. Todas as URI comeam com "content://" que
identifica a informao a ser controlada pelo Content Provider.
Content Provider
Ao definir um Content Provider, aconselhvel definir uma constante URI para
simplificar o cdigo do cliente e fazer atualizaes futuras de maneira fcil.
Android define constantes CONTENT_URI para todos os provedores da plataforma.
O URI para a tabela de nmeros de telefone dos contatos e a URI para a tabela de
figuras dos contatos so controladas pelo Content Provider Contacts:
android.provider.Contacts.Phones.CONTENT_URI
android.provider.Contacts.Photos.CONTENT_URI
A constante URI usada em todas as interaes com o Content Provider. Todo
mtodo ContentResolve recebe a URI como primeiro argumento.
o que define qual provedor o ContentResolver deve chamar e qual tabela o
provedor vai consultar.
Consultando um Content Provider
O URI que identifica o provedor
O nome dos campos procurados
O tipo de dado de cada campo
A identificao de um registro particular (ID)

Para consultar um Content Provider podem ser usados os


mtodos ContentResolver.query() ou Activity.managedQuery().
Ambos recebem os mesmos argumentos e retornam um Cursor.

managedQuery() faz o Activity gerenciar o ciclo de vida do Cursor.


Consultando um Content Provider
Um Cursor gerenciado trata eventos como desalocar a si mesmo
quando o Activity entra em pausa, e ativando a si mesmo quando o
Activity reinicia.
possvel solicitar que o Activity comece a gerenciar um Cursor no
gerenciado chamando Activity.startManagingCursor().
O primeiro argumento para query() ou managedQuery() o URI, que
identifica o ContentProvider e o conjunto de informaes.
Para restringir uma busca a apenas um registro, deve-se adicionar o
valor do _ID.
content://. . . ./23
Consultando um Content Provider

Para acrescentar um ID em uma URI, podem ser usados os


mtodos ContentUris.withAppendedId() e Uri.withAppendedPa
th() para facilitar.
Ambos so estticos e retornam a URI com o ID adicionado.
Uri myPerson = ContentUris.withAppendedId(People.CONTENT
_URI, 23);
Uri myPerson = Uri.withAppendedPath(People.CONTENT_URI, "
23");
Cursor cur = managedQuery(myPerson, null /* 1 */, null /* 2
*/, null /* 3 */, null /* 4 */);
Consultando um Content Provider

Colunas a serem retornadas. Nulo retorna todas as colunas.


android.provider.Contacts.Phones
_ID
NUMBER
NUMBER_KEY
NAME
Filtro de linha. SQL sem o WHERE. Nulo retorna todas as
linhas exceto se o URI delimitar um nico registro
Argumentos de Seleo
Tipo de ordenao para as linhas retornadas. SQL sem o
ORDER BY. Nulo retorna a ordenao padro que pode ser
desordenada.
Consultando um Content Provider

Busca que retorna uma lista de contatos e


telefones:
String[] projection = new String[]
{ People._ID, People._COUNT, People.NAME, People.NUMB
ER };

Uri contacts = People.CONTENT_URI;

Cursor managedCursor =
managedQuery(contacts, projection, null, null, Peop
le.NAME + " ASC");
Consultando um Content Provider

_ID e _COUNT - BaseColumns


NAME - PeopleColumns
NUMBER - PhoneColumns
A Classe Contacts.People implementa cada uma
das interfaces acima.
O que a busca retorna?

A busca retorna um conjunto de zero ou mais registros.


O nome das colunas, ordenao e tipo de dado so especficos de cada Content
Provider.
Cada provedor tem a coluna _ID que a chave nica de cada registro.
Cada provedor informa o nmero de registros retornados pela coluna _COUNT.

_ID _COUNT NAME NUMBER


44 3 Alan Vain 212 555 1234
13 3 Bully Pulpit 425 555 6677
53 3 Rex Cars 201 555 4433
Lendo Dados

getString()
getInt()
getFloat()
Dados Binrios

Imagem ou Som de 20 to 50K


Cursor.getBlob() retorna um byte array
Se o contedo for um URI:
ContentResolver.openInputStream() para obter
um InputStream
Modificando Dados

Operaes:
Adicionar Registros
Atualizar Registros
Apagar Registros
A modificao dos dados feita usando
o ContentResolver.
Adicionando Registros
Para adicionar um novo registro a um Content Provider, declare um par
de valores em um objeto ContentValues, onde cada item casa com o
nome da coluna e com o valor para o novo registro naquela coluna.
A gravao feita com o ContentResolver.insert(). Este mtodo
retornar a URI do novo item.

ContentValues values = new ContentValues();


values.put(People.NAME, "Abraham Lincoln");
values.put(People.STARRED, 1);
Uri uri = getContentResolver().insert(People.CONTENT_URI, values);
Atualizando Valores
Uri phoneUri = null;
Uri emailUri = null;
phoneUri = Uri.withAppendedPath(uri,
People.Phones.CONTENT_DIRECTORY);
values.clear();
values.put(People.Phones.TYPE, People.Phones.TYPE_MOBILE);
values.put(People.Phones.NUMBER, "1233214567");
getContentResolver().insert(phoneUri, values);
emailUri = Uri.withAppendedPath(uri,
People.ContactMethods.CONTENT_DIRECTORY);
Atualizando Valores

values.clear();
values.put(People.ContactMethods.KIND,
Contacts.KIND_EMAIL);
values.put(People.ContactMethods.DATA,
"test@example.com");
values.put(People.ContactMethods.TYPE,
People.ContactMethods.TYPE_HOME);
getContentResolver().insert(emailUri, values);
Dados Binrios

ContentValues.put()
X
ContentResolver.openOutputStream()

MediaStore content provider


Dados Binrios
Apagando um Registro

Para apagar um registro deve-se


chamar ContentResolver.delete() com o URI da linha
desejada.
Para apagar mltiplas linhas deve-se fornecer o URI
de um tipo de registro:
android.provider.Contacts.People.CONTENT_URI
E o comando SQL WHERE, definindo quais linhas
apagar.
Criando um Content Provider

A maioria dos Content Providers armazenam seus


dados usando o Android SQLite
via SQLiteOpenHelper responsvel por criar o
banco de dados gerenciado pelo SQLiteDatabase.
Content URI

Prefixo Padro
Identifica o Content Provider:
<provider android:name=".TransportationProvider"
android:authorities="com.example.transportationprovider" . . . >
Tipo de informao requerida. Se existe apenas um tipo de informao (trains)
ela poder ser omitida
Caso existam subtipos, eles podem ser aninhados: "land/bus", "land/train",
"sea/ship", "sea/submarine"
O ID do registro especfico. Caso no haja:
content://com.example.transportationprovider/trains
Banco de Dados
http://developer.android.com/guide/topics/data/data-storage.html#db
O Android oferece suporte completo para bancos de dado SQLite.
Qualquer banco criado ser acessvel pelo nome por qualquer classe da
aplicao, mas no fora da aplicao

Para criar novos bancos SQLite, crie uma subclasse


de SQLiteOpenHelper e sobrescreva o mtodo onCreate()

Ento execute um comando SQLite para criar as tabelas do banco de


dados:
Banco de Dados
Banco de Dados
Para escrever e ler o banco,
chame getWritableDatabase() e getReadableDatabase().
Eles retornam um objeto SQLiteDatabase que representa o banco e prov
mtodos para operaes SQLite.
recomendvel incluir um ID auto-incrementvel caso se deseje utilizar
um content provider, atravs da constante BaseColumns._ID.
SQLiteDatabase query()
Aceita vrios parmetros, como Table, Projection, Selection, Columns,
Grouping
SQLiteQueryBuilder
Para pesquisas complexas, que requerem aliases.
Exemplos que demonstram como usar o SQLite no Android:
Note Pad e Searchable Dictionary.
Apndice Banco de Dados

Disponvel no Moodle:
Android_05_Database.docx