• Nenhum resultado encontrado

BroadcastReceiver. O que são mensagens broadcasts? Use notificações! (Serão explicadas em breve)

N/A
N/A
Protected

Academic year: 2021

Share "BroadcastReceiver. O que são mensagens broadcasts? Use notificações! (Serão explicadas em breve)"

Copied!
18
0
0

Texto

(1)
(2)

BroadcastReceiver

Chamado pelo Android para reagir a mensagens

broadcast

Usado para executar tarefas rápidas em segundo plano

Não interromper o usuário por meio de activities

Use notificações! (Serão explicadas em breve)

O que são mensagens broadcasts?

São mensagens enviadas pelo Android quando ocorre algum

evento do sistema ou de uma aplicação

Interceptada pelos BroadcastReceiver’s apropriados

(3)

Tipos de broadcast

Ordered ou Síncrono

Os receivers são executados em sequência e a falha de um interrompe o processamento

dos demais

Não está no escopo deste curso

Normal ou Assíncrono

Todos os receivers executam simultaneamente em paralelo e de forma independente

Método para disparar: Context.sendBroadcast(Intent)

Evento

Mensagem

BroadcastReceiver1

(4)

Configurando um receiver

É necessário adicionar o elemento <receiver> dentro de

<aplication> no AndroidManifest.xml

<receiver android:name="NomeReceiver"> <intent-filter> <action android:name="com.example.broadcastreceiver.ACTION"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </receiver>

Implementar uma classe filha de BroadcastReceiver com o

callback onReceive(Context, Intent)

public class NomeReceiver extends BroadcastReceiver { @Override

public void onReceive(Context context, Intent intent) { // ...

} }

(5)

Disparando mensagens broadcast

Criar uma Intent com a mensagem

Enviar via Context.sendBroadcast(Intent)

Context é uma classe base de activity, logo o

método pode ser chamado diretamente

Intent intent = new

Intent("com.example.broadcastreceiver.ACTION");

(6)

Broadcast Receiver

Crie um projeto chamado ReceiverTest

Crie um broadcast conforme slide

anterior

Dentro do método onReceive escreva algo

no log

Edite o projeto IntentFilterTest para

(7)

Mensagens broadcast do sistema

Mensagens broadcast enviadas apenas pelo sistema

Não podem ser enviadas pelo método sendBroadcast()

* Requer permissão android.permission.RECEIVE_BOOT_COMPLETED

** Não podem ser usados com <intent-filter> serão mostrados em breve

android.intent.action

Condição de envio (pelo sistema)

WALLPAPER_CHANGED

Papel de parece alterado

BOOT_COMPLETED*

Sistema concluiu o bootstrap

ACTION_SHUTDOWN

Sistema está desligando (antes de desligar o aparelho)

BATTERY_CHANGED**

Estado de carga da bateria mudou

BATTERY_LOW

Estado de carga da bateria baixo

BATTERY_OKAY

Estado de carga da bateria voltou a níveis normais

ACTION_POWER_CONNECTED

Carregador conectado

ACTION_POWER_DISCONNECTED

Carregador desconectado

(8)

Mensagens broadcast do sistema

** Não podem ser usados com <intent-filter> serão mostrados em breve

android.intent.action.*

Condição de envio (pelo sistema)

TIME_SET

Data e/ou hora do sistema foram alterados

TIMEZONE_CHANGED

Fuso horário foi modificado

TIME_TICK**

Hora do sistema mudou normalmente (enviado a cada minuto)

SCREEN_ON

Tela do dispositivo acendeu (estava inativa, mas usuário ativou)

SCREEN_OFF

Tela do dispositivo apagou (normal para economizar bateria)

PACKAGE_ADDED

Uma nova aplicação foi instalada no dispositivo

PACKAGE_REMOVED

Uma aplicação foi removida do dispositivo

PACKAGE_REPLACED

Uma aplicação foi substituída. Normalmente por upgrade de versão.

(9)

Broadcast de sistema

Adicione mais um receiver no projeto ReceiverTest

<receiver android:name="WallpaperReceiver">

<intent-filter>

<action android:name="android.intent.action.WALLPAPER_CHANGED" />

<category android:name="android.intent.category.DEFAULT" />

</intent-filter>

</receiver>

Adicione o seguinte no callback onReceive()

Log.i(this.getClass().getCanonicalName(), intent.getAction());

Instale a aplicaçao

Tente mudar o papel de parede no emulador

Menu > Wallpaper > Wallpapers

(10)

Alguns outros eventos importantes

Evento Constante Descrição

android.intent.action.BATTERY_CHANGED Aviso transmitido contendo o estado de carga, nível e outras informações sobre a bateria.

android.intent.action.BATTERY_LOW Indica condição de bateria fraca no aparelho.

android.intent.action.BATTERY_OKAY Indica que a bateria está agora bem depois de ter sido baixo. android.intent.action.BOOT_COMPLETED Este é transmitido uma vez, após o boot ter finalizado. android.intent.action.BUG_REPORT Mostrar atividade para relatar um bug.

android.intent.action.CALL Efetuar uma chamada especificada pelos dados.

android.intent.action.CALL_BUTTON O usuário pressionou o botão "call" para ir para o discador ou outro UI apropriado para fazer uma chamada.

android.intent.action.DATE_CHANGED A data foi alterada.

(11)

Exemplo

public

class

MyReceiver

extends

BroadcastReceiver

{

@Override

public

void

onReceive

(

Context

context

,

Intent

intent

)

{

Toast

.

makeText

(

context

,

"Intent Detected."

,

Toast

.

LENGTH_LONG

).

show

();

}

}

<application

android:icon

=

"@drawable/ic_launcher"

android:label

=

"@string/app_name"

android:theme

=

"@style/AppTheme"

>

<receiver

android:name

=

"MyReceiver"

>

<intent-filter>

<action

android:name

=

"android.intent.action.BOOT_COMPLETED"

>

</action>

</intent-filter>

</receiver>

(12)

Método para Broadcast customizada

// broadcast a custom intent.

public

void

broadcastIntent

(

View

view

)

{

Intent

intent

=

new

Intent

();

intent

.

setAction

(

"com.suaaplicacao.CUSTOM_INTENT"

);

sendBroadcast

(

intent

);

}

<receiver

android:name

=

"MyReceiver"

>

<intent-filter>

<action

android:name

=

"com.suaaplicacao.CUSTOM_INTENT"

>

</action>

</intent-filter>

(13)

Configuração de receivers via código

Indicado quando um receiver deve executar apenas

quando uma activity está executando

É possível registrar dinamicamente via código

registerReceiver(BroadcastReceiver, Intent)

unregisterReceiver(BroadcastReceiver)

Recomendável:

Registrar em Activity.onCreate() ou onResume()

“Desregistrar” no Activity.onDestroy() ou onPause()

Note que são necessários para actions TIME_TICK e

(14)

Threads

São linhas ou fluxos de execução de código que rodam

em “paralelo” numa mesma aplicação

Usadas para executar tarefas independentes entre si.

Sempre há uma thread inicial ou principal

Interface gráfica sempre executa nesta thread

Exemplo:

Uma aplicação pode usar 3 threads, assim distribuídas:

Interface gráfica

Reprodução de música

(15)

Exemplo de aplicação

multithread

(16)

Classe Thread e Interface

Runnable

Métodos da classe Thread

* Cuidado ao chamar métodos bloqueantes em threads que recebem callbacks, pois estes devem retornar rapidamente.

Objetos modificados por mais de uma thread:

Thread(Runnable)

Construtor de thread que recebe um objeto Runnable

contendo o código a ser executado

static void sleep(long milis)*

Faz thread que chamar este dormir milis milissegundos.

void start()

Inicia thread

void join(long milis, int nanos)* Aguarda término da thread por tantos milissegundo. Ambos

os argumentos são opcionais.

bool isAlive()

Retorna true se thread ainda está em execução

void run()

Deve ser implementado com o código da thread. A interface

Runnable também possui este método. Não chamar

(17)

Usando threads

Em um método qualquer (criação e execução)

Runnable runnable = new MyRunnable();

Thread thread = new Thread(runnable);

thread.start();

Em outro método (aguardar término)

try {

thread.join(1000);

} catch (InterruptedException e) {}

Classe que contém o código

class MyRunnable implements Runnable {

public void run() {

// codigo da thread que pode ser um loop ou não

}

(18)

Threads e interfaces gráficas

Callbacks sempre rodam na thread principal da

aplicação

Todos os objetos de View e subclasses são

atrelados à thread que o criou também conhecida

como UI Thread

Chamar um método de View que a modifique

resultará no lançamento de uma exceção

ViewRoot.CalledFromWrongThreadException: Apenas a

thread que criou a view pode modificá-la

Para isso deve-se usar um Handler que será mostrado

Referências

Documentos relacionados

Na correção da Folha de Respostas, será atribuída nota 0 (zero) às questões não assinaladas, que contiverem mais de uma alternativa assinalada, emenda ou

O estudo realizado sobre técnicas, métodos e equipamentos utilizados para determinar viscosidade e massa específica de óleos vegetais e gorduras animal demonstrou que a técnica

Adorno notara que uma das características distintivas da sociedade burguesa era uma conduta subjetiva racional e regrada, pautada em uma divisão rígida entre o tempo dedicado ao

[r]

Uma comunidade de base pode ser construída a partir de elos de sangue e de aliança que unem os membros de uma mesma família. Ela pode igualmente ser formada segundo um modelo

Uso na amamentação: As Tetraciclinas são encontradas no leite materno; portanto, seu uso não é recomendado durante a lactação pela possibilidade de causarem descoloração do

Para preservar os benefícios ambientais resultantes da redução das emissões ao nível da União, enquanto as medidas adotadas pelos países terceiros não

environment, the animals had a blood sample collected from the auricular vein for biochemical tests and were then anaesthetised with Zoletil™ at a dose of 15mg/kg. The rabbits’