Android - Intenti e filtri

Un Android Intentè una descrizione astratta di un'operazione da eseguire. Può essere utilizzato constartActivity per avviare un'attività, broadcastIntent per inviarlo a qualsiasi componente BroadcastReceiver interessato e startService(Intent) o bindService(Intent, ServiceConnection, int) per comunicare con un servizio in background.

The intent itself, an Intent object, is a passive data structure holding an abstract description of an operation to be performed.

Ad esempio, supponiamo che tu abbia un'attività che deve avviare un client di posta elettronica e invia un'e-mail utilizzando il tuo dispositivo Android. A tal fine, la tua attività invierà un ACTION_SEND insieme a un messaggio appropriatochooser, in Android Intent Resolver. Il selettore specificato fornisce l'interfaccia appropriata per consentire all'utente di scegliere come inviare i dati di posta elettronica.

Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
email.putExtra(Intent.EXTRA_EMAIL, recipients);
email.putExtra(Intent.EXTRA_SUBJECT, subject.getText().toString());
email.putExtra(Intent.EXTRA_TEXT, body.getText().toString());
startActivity(Intent.createChooser(email, "Choose an email client from..."));

La sintassi sopra sta chiamando il metodo startActivity per avviare un'attività di posta elettronica e il risultato dovrebbe essere come mostrato di seguito -

Ad esempio, supponi di avere un'attività che deve aprire l'URL in un browser web sul tuo dispositivo Android. A tale scopo, la tua attività invierà ACTION_WEB_SEARCH Intent a Android Intent Resolver per aprire l'URL specificato nel browser web. Il Resolver Intent analizza un elenco di attività e sceglie quella che meglio corrisponde all'intento, in questo caso, l'attività del browser web. Intent Resolver passa quindi la tua pagina web al browser web e avvia l'attività del browser web.

String q = "tutorialspoint";
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH );
intent.putExtra(SearchManager.QUERY, q);
startActivity(intent);

L'esempio sopra cercherà come tutorialspoint sul motore di ricerca Android e fornisce il risultato di tutorialspoint nella tua attività

Esistono meccanismi separati per fornire intenti a ciascun tipo di componente: attività, servizi e ricevitori di trasmissione.

Suor n Metodo e descrizione
1

Context.startActivity()

L'oggetto Intent viene passato a questo metodo per avviare una nuova attività o fare in modo che un'attività esistente esegua qualcosa di nuovo.

2

Context.startService()

L'oggetto Intent viene passato a questo metodo per avviare un servizio o fornire nuove istruzioni a un servizio in corso.

3

Context.sendBroadcast()

L'oggetto Intent viene passato a questo metodo per consegnare il messaggio a tutti i ricevitori broadcast interessati.

Oggetti di intento

Un oggetto Intent è un insieme di informazioni che viene utilizzato dal componente che riceve l'intento e le informazioni utilizzate dal sistema Android.

Un oggetto Intent può contenere i seguenti componenti in base a ciò che sta comunicando o che intende eseguire:

Azione

Questa è una parte obbligatoria dell'oggetto Intent ed è una stringa che denomina l'azione da eseguire o, nel caso di intenti di trasmissione, l'azione che ha avuto luogo e viene segnalata. L'azione determina in gran parte come è strutturato il resto dell'oggetto intento. La classe Intent definisce un numero di costanti di azione corrispondenti a diversi intenti. Di seguito è riportato un elenco di azioni standard di Android Intent

L'azione in un oggetto Intent può essere impostata dal metodo setAction () e letta da getAction ().

Dati

Aggiunge una specifica dei dati a un filtro di intento. La specifica può essere solo un tipo di dati (l'attributo mimeType), solo un URI o sia un tipo di dati che un URI. Un URI è specificato da attributi separati per ciascuna delle sue parti -

Questi attributi che specificano il formato dell'URL sono facoltativi, ma anche reciprocamente dipendenti -

  • Se uno schema non è specificato per il filtro intento, tutti gli altri attributi URI vengono ignorati.
  • Se un host non è specificato per il filtro, l'attributo della porta e tutti gli attributi del percorso vengono ignorati.

Il metodo setData () specifica i dati solo come URI, setType () lo specifica solo come tipo MIME e setDataAndType () lo specifica sia come URI che come tipo MIME. L'URI viene letto da getData () e il tipo da getType ().

Alcuni esempi di coppie azione / dati sono:

Sr.No. Coppia di azione / dati e descrizione
1

ACTION_VIEW content://contacts/people/1

Visualizza le informazioni sulla persona il cui identificativo è "1".

2

ACTION_DIAL content://contacts/people/1

Visualizza il dialer del telefono con la persona inserita.

3

ACTION_VIEW tel:123

Visualizza il combinatore telefonico con il numero specificato.

4

ACTION_DIAL tel:123

Visualizza il combinatore telefonico con il numero specificato.

5

ACTION_EDIT content://contacts/people/1

Modifica le informazioni sulla persona il cui identificativo è "1".

6

ACTION_VIEW content://contacts/people/

Visualizza un elenco di persone che l'utente può sfogliare.

7

ACTION_SET_WALLPAPER

Mostra le impostazioni per la scelta dello sfondo

8

ACTION_SYNC

Saranno sincroni i dati, il valore costante lo è android.intent.action.SYNC

9

ACTION_SYSTEM_TUTORIAL

Inizierà il tutorial definito dalla piattaforma (tutorial predefinito o tutorial di avvio)

10

ACTION_TIMEZONE_CHANGED

Indica quando il fuso orario è cambiato

11

ACTION_UNINSTALL_PACKAGE

Viene utilizzato per eseguire il programma di disinstallazione predefinito

Categoria

La categoria è una parte facoltativa dell'oggetto Intent ed è una stringa contenente informazioni aggiuntive sul tipo di componente che dovrebbe gestire l'intento. Il metodo addCategory () inserisce una categoria in un oggetto Intent, removeCategory () elimina una categoria aggiunta in precedenza e getCategories () ottiene l'insieme di tutte le categorie attualmente presenti nell'oggetto. Di seguito è riportato un elenco di categorie standard di Android Intent .

Puoi controllare i dettagli sui filtri di intenti nella sezione sottostante per capire come utilizziamo le categorie per scegliere l'attività appropriata corrispondente a un intento.

Extra

Questo sarà in coppie chiave-valore per ulteriori informazioni che dovrebbero essere fornite al componente che gestisce l'intento. Gli extra possono essere impostati e letti usando rispettivamente i metodi putExtras () e getExtras (). Ecco un elenco di dati extra standard di Android Intent

Bandiere

Questi flag sono una parte facoltativa dell'oggetto Intent e indicano al sistema Android come avviare un'attività e come trattarla dopo che è stata avviata, ecc.

Suor n Bandiere e descrizione
1

FLAG_ACTIVITY_CLEAR_TASK

Se impostato in un Intent passato a Context.startActivity (), questo flag causerà la cancellazione di qualsiasi attività esistente che sarebbe associata all'attività prima che l'attività venga avviata. Cioè, l'attività diventa la nuova radice di un'attività altrimenti vuota e tutte le attività precedenti sono terminate. Può essere utilizzato solo insieme a FLAG_ACTIVITY_NEW_TASK.

2

FLAG_ACTIVITY_CLEAR_TOP

Se impostato e l'attività che viene avviata è già in esecuzione nell'attività corrente, invece di avviare una nuova istanza di tale attività, tutte le altre attività sopra di essa verranno chiuse e questo Intent verrà consegnato a (ora attivo in alto) vecchia attività come nuovo intento.

3

FLAG_ACTIVITY_NEW_TASK

Questo flag viene generalmente utilizzato dalle attività che vogliono presentare un comportamento in stile "launcher": forniscono all'utente un elenco di cose separate che possono essere fatte, che altrimenti vengono eseguite in modo completamente indipendente dall'attività che le lancia.

Nome del componente

Questo campo facoltativo è un androide ComponentNameoggetto che rappresenta la classe Activity, Service o BroadcastReceiver. Se è impostato, l'oggetto Intent viene consegnato a un'istanza della classe designata, altrimenti Android utilizza altre informazioni nell'oggetto Intent per individuare una destinazione adatta.

Il nome del componente è impostato da setComponent (), setClass () o setClassName () e letto da getComponent ().

Tipi di intenti

Esistono due tipi di intenti supportati da Android

Intenti espliciti

L'intento esplicito sarà connesso al mondo interno dell'applicazione, supponiamo che se desideri collegare un'attività a un'altra attività, possiamo fare questa citazione per intento esplicito, l'immagine sottostante collega la prima attività alla seconda attività facendo clic sul pulsante.

Questi intenti designano il componente di destinazione con il suo nome e sono tipicamente utilizzati per i messaggi interni all'applicazione, come un'attività che avvia un servizio subordinato o che avvia un'attività sorella. Ad esempio:

// Explicit Intent by specifying its class name
Intent i = new Intent(FirstActivity.this, SecondActivity.class);

// Starts TargetActivity
startActivity(i);

Intenti impliciti

Questi intenti non denominano una destinazione e il campo per il nome del componente viene lasciato vuoto. Gli intenti impliciti vengono spesso utilizzati per attivare i componenti in altre applicazioni. Ad esempio:

Intent read1=new Intent();
read1.setAction(android.content.Intent.ACTION_VIEW);
read1.setData(ContactsContract.Contacts.CONTENT_URI);
startActivity(read1);

Il codice sopra darà il risultato come mostrato di seguito

Il componente di destinazione che riceve l'intento può utilizzare l'estensione getExtras()metodo per ottenere i dati aggiuntivi inviati dal componente di origine. Ad esempio:

// Get bundle object at appropriate place in your code
Bundle extras = getIntent().getExtras();

// Extract data using passed keys
String value1 = extras.getString("Key1");
String value2 = extras.getString("Key2");

Esempio

L'esempio seguente mostra la funzionalità di un Intent Android per avviare varie applicazioni integrate di Android.

Passo Descrizione
1 Utilizzerai l'IDE di Android Studio per creare un'applicazione Android e chiamarla My Application in un pacchetto com.example.saira_000.myapplication .
2 Modificare il file src / main / java / MainActivity.java e aggiungere il codice per definire due listener corrispondenti a due pulsanti, ad es. Avvia il browser e avvia il telefono.
3 Modifica il file XML di layout res / layout / activity_main.xml per aggiungere tre pulsanti nel layout lineare.
4 Esegui l'applicazione per avviare l'emulatore Android e verifica il risultato delle modifiche apportate nell'applicazione.

Di seguito è riportato il contenuto del file di attività principale modificato src/com.example.My Application/MainActivity.java.

package com.example.saira_000.myapplication;

import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
   Button b1,b2;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      b1=(Button)findViewById(R.id.button);
      b1.setOnClickListener(new View.OnClickListener() {

         @Override
         public void onClick(View v) {
            Intent i = new Intent(android.content.Intent.ACTION_VIEW, 
               Uri.parse("http://www.example.com"));
            startActivity(i);
         }
      });

      b2=(Button)findViewById(R.id.button2);
      b2.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            Intent i = new Intent(android.content.Intent.ACTION_VIEW,
               Uri.parse("tel:9510300000"));
            startActivity(i);
         }
      });
   }
}

Di seguito sarà il contenuto di res/layout/activity_main.xml file -

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" 
   android:layout_width="match_parent"
   android:layout_height="match_parent" 
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" 
   tools:context=".MainActivity">
   
   <TextView
      android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Intent Example"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp" />
      
   <TextView
      android:id="@+id/textView2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point"
      android:textColor="#ff87ff09"
      android:textSize="30dp"
      android:layout_below="@+id/textView1"
      android:layout_centerHorizontal="true" />
      
   <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageButton"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView2"
      android:layout_centerHorizontal="true" />
      
   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText"
      android:layout_below="@+id/imageButton"
      android:layout_alignRight="@+id/imageButton"
      android:layout_alignEnd="@+id/imageButton" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Start Browser"
      android:id="@+id/button"
      android:layout_alignTop="@+id/editText"
      android:layout_alignRight="@+id/textView1"
      android:layout_alignEnd="@+id/textView1"
      android:layout_alignLeft="@+id/imageButton"
      android:layout_alignStart="@+id/imageButton" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Start Phone"
      android:id="@+id/button2"
      android:layout_below="@+id/button"
      android:layout_alignLeft="@+id/button"
      android:layout_alignStart="@+id/button"
      android:layout_alignRight="@+id/textView2"
      android:layout_alignEnd="@+id/textView2" />
</RelativeLayout>

Di seguito sarà il contenuto di res/values/strings.xml per definire due nuove costanti -

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">My Applicaiton</string>
</resources>

Di seguito è riportato il contenuto predefinito di AndroidManifest.xml -

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.saira_000.myapplication">

   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:supportsRtl="true"
      android:theme="@style/AppTheme">
      <activity android:name=".MainActivity">
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
      </activity>
   </application>
</manifest>

Proviamo a eseguire il tuo My Applicationapplicazione. Presumo che tu abbia creato il tuoAVDdurante l'impostazione dell'ambiente. Per eseguire l'app da Android Studio, apri uno dei file di attività del tuo progetto e fai clic

sull'icona Esegui dalla barra degli strumenti.Android Studio installa l'app sul tuo AVD e lo avvia e se tutto va bene con la configurazione e l'applicazione, verrà visualizzato dopo l'emulatore finestra -

Ora fai clic su Start Browser pulsante, che avvierà un browser configurato e visualizzerà http://www.example.com come mostrato di seguito -

In modo simile puoi avviare l'interfaccia del telefono utilizzando il pulsante Avvia telefono, che ti consentirà di comporre il numero di telefono già specificato.

Filtri di intenti

Hai visto come un Intento è stato utilizzato per chiamare un'altra attività. Il sistema operativo Android utilizza filtri per individuare l'insieme di ricevitori di attività, servizi e trasmissioni in grado di gestire l'intento con l'aiuto di un insieme specifico di azioni, categorie, schemi di dati associati a un intento. Userai<intent-filter> elemento nel file manifest per elencare azioni, categorie e tipi di dati associati a qualsiasi attività, servizio o ricevitore di trasmissione.

Di seguito è riportato un esempio di una parte di AndroidManifest.xml file per specificare un'attività com.example.My Application.CustomActivity che può essere richiamato da una delle due azioni menzionate, una categoria e un dato -

<activity android:name=".CustomActivity"
   android:label="@string/app_name">
   
   <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <action android:name="com.example.My Application.LAUNCH" />
      <category android:name="android.intent.category.DEFAULT" />
      <data android:scheme="http" />
   </intent-filter>
   
</activity>

Una volta definita questa attività insieme ai filtri sopra menzionati, altre attività saranno in grado di richiamare questa attività utilizzando il android.intent.action.VIEWo utilizzando il com.example.My Application.LAUNCH azione a condizione che la loro categoria sia android.intent.category.DEFAULT.

Il <data> l'elemento specifica il tipo di dati previsto dall'attività da richiamare e, ad esempio, la nostra attività personalizzata si aspetta che i dati inizino con "http: //"

Potrebbe esserci una situazione in cui un intento può passare attraverso i filtri di più di un'attività o servizio, all'utente potrebbe essere chiesto quale componente attivare. Viene sollevata un'eccezione se non viene trovato alcun obiettivo.

Sono disponibili i seguenti controlli Android di prova prima di richiamare un'attività:

  • Un filtro <intent-filter> può elencare più di un'azione come mostrato sopra ma questo elenco non può essere vuoto; un filtro deve contenere almeno un elemento <action>, altrimenti bloccherà tutti gli intent. Se vengono menzionate più azioni, Android cerca di abbinare una delle azioni menzionate prima di richiamare l'attività.

  • Un filtro <intent-filter> può elencare zero, una o più di una categoria. se non è menzionata alcuna categoria, Android supera sempre questo test, ma se viene menzionata più di una categoria, affinché un intento superi il test di categoria, ogni categoria nell'oggetto Intent deve corrispondere a una categoria nel filtro.

  • Ogni elemento <data> può specificare un URI e un tipo di dati (tipo di supporto MIME). Ci sono attributi separati comescheme, host, port, e pathper ogni parte dell'URI. Un oggetto Intent che contiene sia un URI che un tipo di dati supera la parte del tipo di dati del test solo se il suo tipo corrisponde a un tipo elencato nel filtro.

Esempio

L'esempio seguente è una modifica dell'esempio precedente. Qui vedremo come Android risolve il conflitto se un intento richiama due attività definite in, poi come invocare un'attività personalizzata utilizzando un filtro e il terzo è un caso di eccezione se Android non archivia l'attività appropriata definita per un intento.

Passo Descrizione
1 Utilizzerai Android Studio per creare un'applicazione Android e chiamarla My Application in un pacchetto com.example.tutorialspoint7.myapplication; .
2 Modificare il file src / Main / Java / MainActivity.java e aggiungere il codice per definire tre listener corrispondenti a tre pulsanti definiti nel file di layout.
3 Aggiungi un nuovo file src / Main / Java / CustomActivity.java per avere un'attività personalizzata che verrà richiamata con intenti diversi.
4 Modifica il file XML di layout res / layout / activity_main.xml per aggiungere tre pulsanti nel layout lineare.
5 Aggiungi un file XML di layout res / layout / custom_view.xml per aggiungere un semplice <TextView> per mostrare i dati passati attraverso l'intento.
6 Modifica AndroidManifest.xml per aggiungere <intent-filter> per definire le regole per il tuo intento di richiamare l'attività personalizzata.
7 Esegui l'applicazione per avviare l'emulatore Android e verifica il risultato delle modifiche apportate nell'applicazione.

Di seguito è riportato il contenuto del file di attività principale modificato src/MainActivity.java.

package com.example.tutorialspoint7.myapplication;

import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
   Button b1,b2,b3;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      b1=(Button)findViewById(R.id.button);
      b1.setOnClickListener(new View.OnClickListener() {
      
         @Override
         public void onClick(View v) {
            Intent i = new Intent(android.content.Intent.ACTION_VIEW,
               Uri.parse("http://www.example.com"));
            startActivity(i);
         }
      });

      b2 = (Button)findViewById(R.id.button2);
      b2.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            Intent i = new Intent("com.example.
               tutorialspoint7.myapplication.
                  LAUNCH",Uri.parse("http://www.example.com"));
            startActivity(i);
         }
      });

      b3 = (Button)findViewById(R.id.button3);
      b3.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            Intent i = new Intent("com.example.
               My Application.LAUNCH",
                  Uri.parse("https://www.example.com"));
            startActivity(i);
         }
      });
   }
}

Di seguito è riportato il contenuto del file di attività principale modificato src/com.example.My Application/CustomActivity.java.

package com.example.tutorialspoint7.myapplication;

import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.widget.TextView;

/**
 * Created by TutorialsPoint7 on 8/23/2016.
 */
public class CustomActivity extends Activity {
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.custom_view);
      TextView label = (TextView) findViewById(R.id.show_data);
      Uri url = getIntent().getData();
      label.setText(url.toString());
   }
}

Di seguito sarà il contenuto di res/layout/activity_main.xml file -

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context="com.example.tutorialspoint7.myapplication.MainActivity">

   <TextView
      android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Intent Example"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp" />

   <TextView
      android:id="@+id/textView2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point"
      android:textColor="#ff87ff09"
      android:textSize="30dp"
      android:layout_below="@+id/textView1"
      android:layout_centerHorizontal="true" />

   <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageButton"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView2"
      android:layout_centerHorizontal="true" />

   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText"
      android:layout_below="@+id/imageButton"
      android:layout_alignRight="@+id/imageButton"
      android:layout_alignEnd="@+id/imageButton" />

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Start Browser"
      android:id="@+id/button"
      android:layout_alignTop="@+id/editText"
      android:layout_alignLeft="@+id/imageButton"
      android:layout_alignStart="@+id/imageButton"
      android:layout_alignEnd="@+id/imageButton" />

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Start browsing with launch action"
      android:id="@+id/button2"
      android:layout_below="@+id/button"
      android:layout_alignLeft="@+id/button"
      android:layout_alignStart="@+id/button"
      android:layout_alignEnd="@+id/button" />
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Exceptional condition"
      android:id="@+id/button3"
      android:layout_below="@+id/button2"
      android:layout_alignLeft="@+id/button2"
      android:layout_alignStart="@+id/button2"
      android:layout_toStartOf="@+id/editText"
      android:layout_alignParentEnd="true" />
</RelativeLayout>

Di seguito sarà il contenuto di res/layout/custom_view.xml file -

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical" android:layout_width="match_parent"
   android:layout_height="match_parent">
   <TextView android:id="@+id/show_data"
      android:layout_width="fill_parent"
      android:layout_height="400dp"/>
</LinearLayout>

Di seguito sarà il contenuto di res/values/strings.xml per definire due nuove costanti -

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">My Application</string>
</resources>

Di seguito è riportato il contenuto predefinito di AndroidManifest.xml -

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.tutorialspoint7.myapplication">

   <application
      android:allowBackup = "true"
      android:icon = "@mipmap/ic_launcher"
      android:label = "@string/app_name"
      android:supportsRtl = "true"
      android:theme = "@style/AppTheme">
      <activity android:name = ".MainActivity">
         <intent-filter>
            <action android:name = "android.intent.action.MAIN" />
            <category android:name = "android.intent.category.LAUNCHER" />
         </intent-filter>
      </activity>
      
      <activity android:name="com.example.tutorialspoint7.myapplication.CustomActivity">

         <intent-filter>
            <action android:name = "android.intent.action.VIEW" />
            <action android:name = "com.example.tutorialspoint7.myapplication.LAUNCH" />
            <category android:name = "android.intent.category.DEFAULT" />
            <data android:scheme = "http" />
         </intent-filter>

      </activity>
   </application>

</manifest>

Proviamo a eseguire il tuo My Applicationapplicazione. Presumo che tu abbia creato il tuoAVDdurante l'impostazione dell'ambiente. Per eseguire l'app da Android Studio, apri uno dei file di attività del progetto e fai clic

sull'icona Esegui dalla barra degli strumenti. Android Studio installa l'app sul tuo AVD e la avvia e se tutto va bene con la configurazione e l'applicazione, verrà visualizzata la seguente finestra dell'emulatore:

Ora iniziamo con il primo pulsante "Avvia browser con azione VISTA". Qui abbiamo definito la nostra attività personalizzata con un filtro "android.intent.action.VIEW", ed esiste già un'attività predefinita contro l'azione VIEW definita da Android che avvia il browser web, quindi Android visualizza le seguenti due opzioni per selezionare l'attività che tu desidera avviare.

Ora, se selezioni Browser, Android avvierà il browser web e aprirà il sito web example.com, ma se selezioni l'opzione IndentDemo, Android avvierà CustomActivity che non fa altro che acquisire i dati passati e mostrarli in una visualizzazione di testo come segue:

Ora torna indietro utilizzando il pulsante Indietro e fai clic sul pulsante "Avvia browser con azione LANCIA", qui Android applica il filtro per scegliere la definizione dell'attività e avvia semplicemente la tua attività personalizzata

Ancora una volta, torna indietro utilizzando il pulsante Indietro e fai clic sul pulsante "Condizione di eccezione", qui Android cerca di trovare un filtro valido per l'intento dato ma non trova un'attività valida definita perché questa volta abbiamo utilizzato i dati come https invece di http sebbene stiamo dando un'azione corretta, quindi Android solleva un'eccezione e mostra la seguente schermata: