JavascriptProva

giovedì 7 aprile 2016

Chiamare Activities con Intent impliciti.

Ecco, adesso che ho imparato a fare gli Intent espliciti, voglio farli impliciti, ossia chiamare Activities per "azione" e non per nome.

Ecco il file Manifest di un'applicazione:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.idea"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="18"
        android:targetSdkVersion="23" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <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>
        <activity
            android:name=".Seconda"
            android:label="@string/title_activity_seconda" >
            <intent-filter>
                <action android:name="android.intent.action.Seconda" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>
</manifest> 
...in cui ogni Activity, oltre ad avere un name, ha anche un intent-filter nel quale è specificata una action.
Proviamo a chiamare l'Activity Seconda con l'Intent implicito, specificando l'action "android.intent.action.Seconda".
  Intent intent=new Intent();
  intent.setAction("android.intent.action.Seconda");
  startActivity(intent);
E proviamo...

Funziona egregiamente!

Adesso una sfida più difficile: creiamo un'altra Activity e impostiamoci la stessa action.
Ho creato un'altra activity chiamata "Altra", ed eccola nel Manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.idea"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="18"
        android:targetSdkVersion="23" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <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>
        <activity
            android:name=".Seconda"
            android:label="@string/title_activity_seconda" >
            <intent-filter>
                <action android:name="android.intent.action.Seconda" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".Altra"
            android:label="@string/title_activity_altra" >
            <intent-filter>
                <action android:name="android.intent.action.Seconda" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>

</manifest> 
...ho dovuto aggiungere manualmente l'intent-filter.
Questa ha la stessa action dell'Activity "Seconda".
Vediamo cosa succede usando l'Intent implicito con la stessa action condivisa da due Activities:

Ecco! E' quello che mi aspettavo!



Come quando ad esempio clicco su un'immagine e mi appare la casella di dialogo che mi invita a scegliere con quale applicazione aprire l'immagine.
Perfetto!

Nessun commento:

Posta un commento