Un aspetto che mi piace molto della piattaforma Android e’ quello degli Intent filters: un metodo rapido e veloce per esporre al resto del sistema cosa e’ in grado di fare un’applicazione, i tipi di dati che e’ in grado di gestire e le azioni che e’ in grado di compiere. Oltre a quelli definibili dall’utente, ce ne sono tutta una serie che riguardano operazioni standard, come spedire una mail, visualizzare un’immagine, aprire un link ecc. Si ottiene quindi un modo facile e veloce per aggiungere “nuovi pezzi” al sistema oppure estendere quelli esistenti con qualcosa di personalizzato, magari anche migliore, in maniera trasparente all’utente finale e molto facile per il programmatore, che non deve far altro che specificare nel Manifest.xml dell’applicazione quali intent filters le singole activity sono in grado di gestire.
Ad esempio, per fare in modo che la propria applicazione appaia tra la lista di quelle disponibili per mandare un sms oppure per condividere del testo, ecco i passi da eseguire.
Poniamo che l’activity ActSendSms sia in grado di mandare sms. Va aggiunto nel Manifest.xml questo blocco di codice:
<!-- Defines also the app name in the Android menu --> <activity android:name="it.rainbowbreeze.smsforfree.ui.ActSendSms" android:label="@string/common_appName" > <!-- Sends sms for someone --> <intent-filter> <action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.SENDTO" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="sms" /> <data android:scheme="smsto" /> </intent-filter> <!-- Sends text to someone --> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> </activity>
Nei commenti e’ indicato a cosa servono nello specifico i due filtri.
Occorre poi, sempre nel codice del file ActSendSms.java, andare a prendere le informazioni che l’intent filter porta con se. Nel caso di invio di sms il numero del destinatario a cui mandare il messagio, nel caso di condivisione di una nota di testo, il testo da condividere. Ecco un esempio di codice:
private void processIntentData(Intent intent)
{
if (null == intent) return;
if (Intent.ACTION_SENDTO.equals(intent.getAction())) {
//in the data i'll find the number of the destination
String destionationNumber = intent.getDataString();
destionationNumber = URLDecoder.decode(destionationNumber);
//clear the string
destionationNumber = destionationNumber.replace("-", "")
.replace("smsto:", "")
.replace("sms:", "");
//and set fields
mTxtDestination.setText(destionationNumber);
} else if (Intent.ACTION_SEND.equals(intent.getAction()) && "text/plain".equals(intent.getType())) {
//in the data i'll find the content of the message
String message = intent.getStringExtra(Intent.EXTRA_TEXT);
//clear the string
mTxtBody.setText(message);
}
}
Che richiamo dal metodo onCreate dell’activity come in questo esempio di codice
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
mTxtDestination = (EditText) findViewById(R.id.actsendsms_txtDestination);
mTxtBody = (EditText) findViewById(R.id.actsendsms_txtMessage);
...
//executed when the application first runs
if (null == savedInstanceState) {
processIntentData(getIntent());
}
}
E questo e’ quanto l’utente vede selezionando “Send message” dell’applicativo dei contatti. Oltre all’applicazione standard, appare anche la mia applicazione SmsForFree.
Related posts:



[...] Con la pausa d’agosto davanti e il clima di ferie che si inizia a respirare, sto cercando la calma e la lucidità per fare un’analisi delle cose fatte da marzo a oggi, tra lavori ed eventi che ho seguito. Intanto, voglio cogliere l’occasione per ringraziare gli organizzatori dell’IA Summit e dell’Experience Camp di Lugano, per la qualità degli interventi e l’apertura al confronto. Devo ringraziare anche la “Mimula” Francesca, per questa intervista. E grazie anche al solito Alfredo, che mi ha dato l’opportunità di disegnare la launcher icon per la sua applicazione androidiana “SMS for free”. [...]
[...] Android e Intent filters per registrare un’applicazione tra quelle per mandare SMS di Alfredo Morresi (rainbowbreeze) [...]