Intent, Broadcast
Receiver e Notifications


Gustavo Henrique Rodrigues Pinto Tomas
    gustavo.rodrigues@cesar.org.br
Agenda
• Intent
      – Intent Filter
      – Desafio 1
      – Desafio 2
• Broadcast Receiver
      – Desafio 3
• Notifications
      – Desafio 4




16/02/2012                       2
Intent
• Comunicação de activities, services e broadcast
  receiver;
• Inicia apenas uma ação;
• Falicita a comunicação em uma mesma
  aplicação e entre aplicações;
• Envia e recebe dados (tipos primitivos, objetos
  serializáveis...).




16/02/2012                                          3
Intent(2)
• Exemplo:
      Intent it = new Intent(this, ViewFormActivity.class);

      it.putExtra(ViewFormActivity.NAME_INTENT, name);
      it.putExtra(ViewFormActivity.ADDRESS_INTENT, adress);
      it.putExtra(ViewFormActivity.AGE_INTENT, age);
      it.putExtra(ViewFormActivity.USER_INTENT, user);

      startActivity(it);

             Boas Práticas: Ao setar a key em um método putExtra, utilize
             sempre constantes definidas como public na activity de
             destino



16/02/2012                                                                  4
Intent(3)
• Utilizando intents é possível invocar outras
  aplicações através das respectivas actions.
• Exemplos:
      – Intent.ACTION_CALL: faz uma ligação;
      – Intent.ACTION_DIAL: abre o aplicativo default de dial;
      – Intent.ACTION_MAIN:
             • CATEGORY_APP_EMAIL: abre o aplicativo de email;
             • CATEGORY_APP_BROWSER: abre o browser;
             • ATEGORY_APP_CONTACTS abre o aplicativo de calendario;




16/02/2012                                                             5
Intent Filter
• Mecanismo alternativo de invocar uma activity:
 <activity
      android:name=“MInhaActivity"
      android:label="@string/app_name" >
      <intent-filter>
         <action android:name=“ABRA_MINHA_ACTIVITY" />
         <category android:name="android.intent.category.DEFAULT" />
      </intent-filter>
 </activity>

• Android fica ouvindo um intent com a ação
  ABRA_MINHA_ACTIVITY.Assim que receber
  invocará MinhaActivity.

16/02/2012                                                             6
Desafio 1 - Intent
• Criar uma aplicação com duas telas:
      – A primeira será um formulário com os campos nome, endereço e
        idade com um botão “Enviar”. Quando o usuário clicar no botão
        as informações devem ser enviadas para a segunda activity;
      – A segunda activity deve apenas receber os dados e exibir na
        tela;



             Boas Práticas: Ao definir o id de um componente, utilize:
             android:id=“@+idNOMEDESCRITIVO/...” na qual
             NOMEDESCRITIVO pode ser um label para a activity



16/02/2012                                                               7
Desafio 2: Intent
• Alterar a aplicação anterior para enviar as
  informações a partir de uma classe chamada
  Form, com as informações do formulário.




             Através de um intent é possível enviar objetos serializáveis




16/02/2012                                                                  8
BroadCast Receiver
• Permitir que a sua aplicação fique “ouvindo”
  intents iniciados por qualquer aplicativo;
• Declaração no AndroidManifest.xml:
</application>
    <receiver android:name="ReceiverSample">
        <intent-filter>
            <action
              android:name="android.intent.action.PHONE_STATE“ />
        </intent-filter>
    </receiver>
</application>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>



16/02/2012                                                              9
BroadCast Receiver
• Quanto algum aplicativo enviar um intent do tipo
  PHONE_STATE, será chamado o método
  onReceive() da classe ReceiverSample;
• ReceiverSample deve estender de
  BroadcastReceiver;

public class ReceiverSample extends BroadcastReceiver {
   @Override
   public void onReceive(Context context, Intent intent) {
   }
}



16/02/2012                                                   10
Desafio 3: Broadcast Receiver
• Alterar a aplicação Formulário para ao receber
  uma chamada telefônica, interceptar e logar o
  numero do telefone que esta ligando;




             Não se esquece de declarar a permissão de
             android.permission.READ_PHONE_STATE para ler as
             alterações de estado do telefone




16/02/2012                                                     11
Notifications
• Mecanismo de feedback imediato ao usuário;
• Utilizado quando algum processamento em
  background precisa de alguma iteração com o
  usuário;
• Mais utilizado: Status Bar




16/02/2012                                      12
Notifications: Status Bar
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager)
   getSystemService(ns);

CharSequence tickerText = "New call captured";

Notification notification = new Notification(R.drawable.ic_launcher,
   tickerText, when);

CharSequence contentTitle = "Phone Number";
CharSequence contentText = “Content message”;
Intent notificationIntent = new Intent(this, FormAPKActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(c, 0,
   notificationIntent, 0);

notification.setLatestEventInfo(this, contentTitle, contentText,
   contentIntent);

mNotificationManager.notify(HELLO_ID, notification);



16/02/2012                                                             13
Desafio 4: Status Bar
• Alterar a aplicação desenvolvida para assim que
  receber uma ligação notificar o usuário usando
  Status Bar com o número de telefone;




             Utilize o BroadcastReceiver criado no desafio anterior.




16/02/2012                                                             14
Obrigado!

         Gustavo Henrique Rodrigues Pinto Tomas
          Email: gustavo.rodrigues@cesar.org.br
                Twitter: @gustahrodrigues

    Código fonte disponível em: http://bit.ly/xGrlTW




16/02/2012                                             15

Android: Intent, Broadcast Receiver e Notifications

  • 1.
    Intent, Broadcast Receiver eNotifications Gustavo Henrique Rodrigues Pinto Tomas gustavo.rodrigues@cesar.org.br
  • 2.
    Agenda • Intent – Intent Filter – Desafio 1 – Desafio 2 • Broadcast Receiver – Desafio 3 • Notifications – Desafio 4 16/02/2012 2
  • 3.
    Intent • Comunicação deactivities, services e broadcast receiver; • Inicia apenas uma ação; • Falicita a comunicação em uma mesma aplicação e entre aplicações; • Envia e recebe dados (tipos primitivos, objetos serializáveis...). 16/02/2012 3
  • 4.
    Intent(2) • Exemplo: Intent it = new Intent(this, ViewFormActivity.class); it.putExtra(ViewFormActivity.NAME_INTENT, name); it.putExtra(ViewFormActivity.ADDRESS_INTENT, adress); it.putExtra(ViewFormActivity.AGE_INTENT, age); it.putExtra(ViewFormActivity.USER_INTENT, user); startActivity(it); Boas Práticas: Ao setar a key em um método putExtra, utilize sempre constantes definidas como public na activity de destino 16/02/2012 4
  • 5.
    Intent(3) • Utilizando intentsé possível invocar outras aplicações através das respectivas actions. • Exemplos: – Intent.ACTION_CALL: faz uma ligação; – Intent.ACTION_DIAL: abre o aplicativo default de dial; – Intent.ACTION_MAIN: • CATEGORY_APP_EMAIL: abre o aplicativo de email; • CATEGORY_APP_BROWSER: abre o browser; • ATEGORY_APP_CONTACTS abre o aplicativo de calendario; 16/02/2012 5
  • 6.
    Intent Filter • Mecanismoalternativo de invocar uma activity: <activity android:name=“MInhaActivity" android:label="@string/app_name" > <intent-filter> <action android:name=“ABRA_MINHA_ACTIVITY" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> • Android fica ouvindo um intent com a ação ABRA_MINHA_ACTIVITY.Assim que receber invocará MinhaActivity. 16/02/2012 6
  • 7.
    Desafio 1 -Intent • Criar uma aplicação com duas telas: – A primeira será um formulário com os campos nome, endereço e idade com um botão “Enviar”. Quando o usuário clicar no botão as informações devem ser enviadas para a segunda activity; – A segunda activity deve apenas receber os dados e exibir na tela; Boas Práticas: Ao definir o id de um componente, utilize: android:id=“@+idNOMEDESCRITIVO/...” na qual NOMEDESCRITIVO pode ser um label para a activity 16/02/2012 7
  • 8.
    Desafio 2: Intent •Alterar a aplicação anterior para enviar as informações a partir de uma classe chamada Form, com as informações do formulário. Através de um intent é possível enviar objetos serializáveis 16/02/2012 8
  • 9.
    BroadCast Receiver • Permitirque a sua aplicação fique “ouvindo” intents iniciados por qualquer aplicativo; • Declaração no AndroidManifest.xml: </application> <receiver android:name="ReceiverSample"> <intent-filter> <action android:name="android.intent.action.PHONE_STATE“ /> </intent-filter> </receiver> </application> <uses-permission android:name="android.permission.CALL_PHONE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 16/02/2012 9
  • 10.
    BroadCast Receiver • Quantoalgum aplicativo enviar um intent do tipo PHONE_STATE, será chamado o método onReceive() da classe ReceiverSample; • ReceiverSample deve estender de BroadcastReceiver; public class ReceiverSample extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { } } 16/02/2012 10
  • 11.
    Desafio 3: BroadcastReceiver • Alterar a aplicação Formulário para ao receber uma chamada telefônica, interceptar e logar o numero do telefone que esta ligando; Não se esquece de declarar a permissão de android.permission.READ_PHONE_STATE para ler as alterações de estado do telefone 16/02/2012 11
  • 12.
    Notifications • Mecanismo defeedback imediato ao usuário; • Utilizado quando algum processamento em background precisa de alguma iteração com o usuário; • Mais utilizado: Status Bar 16/02/2012 12
  • 13.
    Notifications: Status Bar Stringns = Context.NOTIFICATION_SERVICE; NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns); CharSequence tickerText = "New call captured"; Notification notification = new Notification(R.drawable.ic_launcher, tickerText, when); CharSequence contentTitle = "Phone Number"; CharSequence contentText = “Content message”; Intent notificationIntent = new Intent(this, FormAPKActivity.class); PendingIntent contentIntent = PendingIntent.getActivity(c, 0, notificationIntent, 0); notification.setLatestEventInfo(this, contentTitle, contentText, contentIntent); mNotificationManager.notify(HELLO_ID, notification); 16/02/2012 13
  • 14.
    Desafio 4: StatusBar • Alterar a aplicação desenvolvida para assim que receber uma ligação notificar o usuário usando Status Bar com o número de telefone; Utilize o BroadcastReceiver criado no desafio anterior. 16/02/2012 14
  • 15.
    Obrigado! Gustavo Henrique Rodrigues Pinto Tomas Email: gustavo.rodrigues@cesar.org.br Twitter: @gustahrodrigues Código fonte disponível em: http://bit.ly/xGrlTW 16/02/2012 15