JavascriptProva

martedì 19 gennaio 2016

Approccio con i BroadcastReceiver

Ho scritto questo codice:
public class AirplaneReceiver extends BroadcastReceiver {
 @Override
 public void onReceive(Context context, Intent intent) {
 }
}
L'ho chiamato AirplaneReceiver, ma avrei potuto chiamarlo pure Pasquale, se avessi voluto.
Anzi, facciamo una cosa: lo chiamo veramente Pasquale! O meglio con un nome mio di fantasia, sempre pertinente...
public class Ricevitore extends BroadcastReceiver {
 @Override
 public void onReceive(Context context, Intent intent) {
 }
}
Scrivo il codice delle azioni da fare al ricevimento del Broadcast:
public class Ricevitore extends BroadcastReceiver {
 @Override
 public void onReceive(Context context, Intent intent) {
  Toast.makeText(context, "Ciao, bella gente!", Toast.LENGTH_SHORT).show();
 }
}
(con la scusa, ho ripassato un po' la sintassi del Toast)

E adesso, seguendo il tutorial, andiamo alla parte della registrazione.
Per prima cosa scrivo il tag %lt;receiver>
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
        <receiver>
            
        </receiver> 
Il questo tag devo specificare android:name
        <receiver android:name=>
           
        </receiver> 
e ottengo a questo punto una lista di suggerimenti:



...dalla quale scelgo il primo:
        <receiver android:name="com.example.broadcast.Ricevitore"           
        </receiver> 
Fondamentale è notare che questo android:name è uguale al nome del package più il nome della classe che estende BroadcastReceiver!


Poi si va avanti con un <intent-filter></intent-filter> nel quale ci va un <action>.
Ecco:
        <receiver android:name="com.example.broadcast.Ricevitore"> 
            <intent-filter >
                <action android:name=""
            </intent-filter>         
        </receiver> 
E qui c'è un elemento decisivo: il nome del Broadcast che viene ascoltato!
        <receiver android:name="com.example.broadcast.Ricevitore"> 
            <intent-filter >
                <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
            </intent-filter>         
        </receiver> 
Ho scelto un Broadcast diverso da quello del tutorial, con l'intenzione di provarlo.

Dunque, il codice che do in Java serve a stabilire la risposta del BroadcastReceiver al messaggio Broadcast, ma non individua l'azione.
Abbiamo il nome e l'azione. Punto. Quindi nella registrazione si mettono insieme il nome del BroadcastReceiver e come intent-filter si stabilisce il messaggio che viene ascoltato dal BroadcastReceiver.

Non è difficile: xml dice: "C'è un messaggio di tipo SMS ricevuto, attivare il receiver Ricevitore. Attivato questo receiver, esso ha specificata l'azione da intraprendere, ossia la creazione di un messaggio Toast.

Vediamo se funziona!

Nessun commento:

Posta un commento