Android - Absichten und Filter
Ein Android Intentist eine abstrakte Beschreibung einer auszuführenden Operation. Es kann mit verwendet werdenstartActivity um eine Aktivität zu starten, broadcastIntent um es an interessierte BroadcastReceiver-Komponenten zu senden, und startService(Intent) oder bindService(Intent, ServiceConnection, int) mit einem Hintergrunddienst zu kommunizieren.
The intent itself, an Intent object, is a passive data structure holding an abstract description of an operation to be performed.
Angenommen, Sie haben eine Aktivität, die einen E-Mail-Client starten und eine E-Mail mit Ihrem Android-Gerät senden muss. Zu diesem Zweck würde Ihre Aktivität ein ACTION_SEND zusammen mit dem entsprechenden sendenchooser, zum Android Intent Resolver. Die angegebene Auswahl bietet dem Benutzer die richtige Oberfläche, um auszuwählen, wie Ihre E-Mail-Daten gesendet werden sollen.
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..."));
Die obige Syntax ruft die Methode startActivity auf, um eine E-Mail-Aktivität zu starten. Das Ergebnis sollte wie folgt aussehen:
Angenommen, Sie haben eine Aktivität, die eine URL in einem Webbrowser auf Ihrem Android-Gerät öffnen muss. Zu diesem Zweck sendet Ihre Aktivität ACTION_WEB_SEARCH Intent an den Android Intent Resolver, um die angegebene URL im Webbrowser zu öffnen. Der Intent Resolver analysiert eine Liste von Aktivitäten und wählt diejenige aus, die am besten zu Ihrer Absicht passt, in diesem Fall die Webbrowser-Aktivität. Der Intent Resolver leitet Ihre Webseite dann an den Webbrowser weiter und startet die Webbrowser-Aktivität.
String q = "tutorialspoint";
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH );
intent.putExtra(SearchManager.QUERY, q);
startActivity(intent);
Das obige Beispiel sucht als tutorialspoint auf Android-Suchmaschine und es gibt das Ergebnis von Tutorialspoint in Ihrer Aktivität
Es gibt separate Mechanismen für die Übermittlung von Absichten an jede Art von Komponente - Aktivitäten, Dienste und Rundfunkempfänger.
Sr.Nr. | Methode & Beschreibung |
---|---|
1 |
Context.startActivity() Das Intent-Objekt wird an diese Methode übergeben, um eine neue Aktivität zu starten oder eine vorhandene Aktivität dazu zu bringen, etwas Neues zu tun. |
2 |
Context.startService() Das Intent-Objekt wird an diese Methode übergeben, um einen Dienst zu initiieren oder neue Anweisungen an einen laufenden Dienst zu senden. |
3 |
Context.sendBroadcast() Das Intent-Objekt wird an diese Methode übergeben, um die Nachricht an alle interessierten Rundfunkempfänger zu übermitteln. |
Absichtsobjekte
Ein Intent-Objekt ist ein Informationsbündel, das von der Komponente verwendet wird, die die Intent empfängt, sowie Informationen, die vom Android-System verwendet werden.
Ein Intent-Objekt kann die folgenden Komponenten enthalten, je nachdem, was es kommuniziert oder ausführen wird:
Aktion
Dies ist ein obligatorischer Bestandteil des Intent-Objekts und eine Zeichenfolge, die die auszuführende Aktion benennt - oder im Fall von Broadcast-Absichten die Aktion, die stattgefunden hat und gemeldet wird. Die Aktion bestimmt weitgehend, wie der Rest des Intent-Objekts strukturiert ist. Die Intent-Klasse definiert eine Reihe von Aktionskonstanten, die unterschiedlichen Absichten entsprechen. Hier ist eine Liste der Android Intent Standardaktionen
Die Aktion in einem Intent-Objekt kann mit der Methode setAction () festgelegt und von getAction () gelesen werden.
Daten
Fügt einem Absichtsfilter eine Datenspezifikation hinzu. Die Spezifikation kann nur ein Datentyp (das Attribut mimeType), nur ein URI oder sowohl ein Datentyp als auch ein URI sein. Ein URI wird durch separate Attribute für jeden seiner Teile angegeben.
Diese Attribute, die das URL-Format angeben, sind optional, aber auch voneinander abhängig.
- Wenn für den Absichtsfilter kein Schema angegeben ist, werden alle anderen URI-Attribute ignoriert.
- Wenn für den Filter kein Host angegeben ist, werden das Portattribut und alle Pfadattribute ignoriert.
Die Methode setData () gibt Daten nur als URI an, setType () gibt sie nur als MIME-Typ an und setDataAndType () gibt sie sowohl als URI als auch als MIME-Typ an. Der URI wird von getData () und der Typ von getType () gelesen.
Einige Beispiele für Aktions- / Datenpaare sind -
Sr.Nr. | Aktion / Datenpaar & Beschreibung |
---|---|
1 | ACTION_VIEW content://contacts/people/1 Zeigen Sie Informationen zu der Person an, deren Kennung "1" ist. |
2 |
ACTION_DIAL content://contacts/people/1 Zeigen Sie den Telefonwähler mit der ausgefüllten Person an. |
3 |
ACTION_VIEW tel:123 Zeigen Sie den Telefonwähler mit der angegebenen Nummer an. |
4 |
ACTION_DIAL tel:123 Zeigen Sie den Telefonwähler mit der angegebenen Nummer an. |
5 |
ACTION_EDIT content://contacts/people/1 Bearbeiten Sie Informationen zu der Person, deren Kennung "1" ist. |
6 |
ACTION_VIEW content://contacts/people/ Zeigen Sie eine Liste von Personen an, die der Benutzer durchsuchen kann. |
7 |
ACTION_SET_WALLPAPER Einstellungen für die Auswahl des Hintergrundbilds anzeigen |
8 |
ACTION_SYNC Es werden die Daten synchron sein, konstanter Wert ist android.intent.action.SYNC |
9 |
ACTION_SYSTEM_TUTORIAL Das plattformdefinierte Lernprogramm wird gestartet (Standard-Lernprogramm oder Start-Lernprogramm). |
10 |
ACTION_TIMEZONE_CHANGED Es zeigt an, wann sich die Zeitzone geändert hat |
11 |
ACTION_UNINSTALL_PACKAGE Es wird verwendet, um das Standard-Deinstallationsprogramm auszuführen |
Kategorie
Die Kategorie ist ein optionaler Teil des Intent-Objekts und eine Zeichenfolge, die zusätzliche Informationen zu der Art der Komponente enthält, die die Absicht verarbeiten soll. Die Methode addCategory () platziert eine Kategorie in einem Intent-Objekt, removeCategory () löscht eine zuvor hinzugefügte Kategorie und getCategories () ruft die Menge aller Kategorien ab, die sich derzeit im Objekt befinden. Hier ist eine Liste der Android Intent Standard-Kategorien .
Sie können die Details zu Absichtsfiltern im folgenden Abschnitt überprüfen, um zu verstehen, wie wir Kategorien verwenden, um die geeignete Aktivität auszuwählen, die einer Absicht entspricht.
Extras
Dies erfolgt in Schlüssel-Wert-Paaren für zusätzliche Informationen, die an die Komponente gesendet werden sollen, die die Absicht verarbeitet. Die Extras können mit den Methoden putExtras () und getExtras () festgelegt und gelesen werden. Hier ist eine Liste der zusätzlichen Android Intent Standard-Daten
Flaggen
Diese Flags sind optionaler Bestandteil des Intent-Objekts und weisen das Android-System an, wie eine Aktivität gestartet und nach dem Start behandelt wird.
Sr.Nr. | Flaggen & Beschreibung |
---|---|
1 |
FLAG_ACTIVITY_CLEAR_TASK Wenn in einem an Context.startActivity () übergebenen Intent festgelegt, wird dieses Flag dazu führen, dass alle vorhandenen Aufgaben, die der Aktivität zugeordnet sind, gelöscht werden, bevor die Aktivität gestartet wird. Das heißt, die Aktivität wird zur neuen Wurzel einer ansonsten leeren Aufgabe, und alle alten Aktivitäten werden beendet. Dies kann nur in Verbindung mit FLAG_ACTIVITY_NEW_TASK verwendet werden. |
2 |
FLAG_ACTIVITY_CLEAR_TOP Wenn diese Option festgelegt ist und die zu startende Aktivität bereits in der aktuellen Aufgabe ausgeführt wird, werden anstelle einer neuen Instanz dieser Aktivität alle anderen darüber liegenden Aktivitäten geschlossen und diese Absicht an die (jetzt) übergeben top) alte Aktivität als neue Absicht. |
3 |
FLAG_ACTIVITY_NEW_TASK Dieses Flag wird im Allgemeinen von Aktivitäten verwendet, die ein Verhalten im "Launcher" -Stil darstellen möchten: Sie geben dem Benutzer eine Liste der verschiedenen möglichen Aktionen, die ansonsten völlig unabhängig von der Aktivität ausgeführt werden, mit der sie gestartet werden. |
Komponentenname
Dieses optionale Feld ist ein Android ComponentNameObjekt, das entweder die Klasse Activity, Service oder BroadcastReceiver darstellt. Wenn es festgelegt ist, wird das Intent-Objekt an eine Instanz der angegebenen Klasse übergeben, andernfalls verwendet Android andere Informationen im Intent-Objekt, um ein geeignetes Ziel zu finden.
Der Komponentenname wird von setComponent (), setClass () oder setClassName () festgelegt und von getComponent () gelesen.
Arten von Absichten
Es gibt zwei Arten von Absichten, die von Android unterstützt werden
Explizite Absichten
Explizite Absicht wird mit der internen Anwendungswelt verbunden. Wenn Sie eine Aktivität mit einer anderen Aktivität verbinden möchten, können Sie dieses Zitat mit expliziter Absicht ausführen. Das folgende Bild verbindet die erste Aktivität mit der zweiten Aktivität, indem Sie auf die Schaltfläche klicken.
Diese Absichten kennzeichnen die Zielkomponente anhand ihres Namens und werden normalerweise für anwendungsinterne Nachrichten verwendet, z. B. für eine Aktivität, mit der ein untergeordneter Dienst gestartet oder eine Schwesteraktivität gestartet wird. Zum Beispiel -
// Explicit Intent by specifying its class name
Intent i = new Intent(FirstActivity.this, SecondActivity.class);
// Starts TargetActivity
startActivity(i);
Implizite Absichten
Diese Absichten benennen kein Ziel und das Feld für den Komponentennamen bleibt leer. Implizite Absichten werden häufig verwendet, um Komponenten in anderen Anwendungen zu aktivieren. Zum Beispiel -
Intent read1=new Intent();
read1.setAction(android.content.Intent.ACTION_VIEW);
read1.setData(ContactsContract.Contacts.CONTENT_URI);
startActivity(read1);
Der obige Code liefert das unten gezeigte Ergebnis
Die Zielkomponente, die die Absicht erhält, kann die verwenden getExtras()Methode zum Abrufen der von der Quellkomponente gesendeten zusätzlichen Daten. Zum Beispiel -
// 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");
Beispiel
Das folgende Beispiel zeigt die Funktionalität eines Android Intent zum Starten verschiedener integrierter Android-Anwendungen.
Schritt | Beschreibung |
---|---|
1 | Mit der Android Studio-IDE erstellen Sie eine Android-Anwendung und benennen sie unter dem Paket com.example.saira_000.myapplication als Meine Anwendung . |
2 | Ändern src / main / java / MainActivity.java - Datei und fügen Sie den Code zwei Hörern dh zwei entsprechenden Tasten zu definieren. Starten Sie den Browser und starten Sie das Telefon. |
3 | Ändern Sie die Layout-XML-Datei res / layout / activity_main.xml , um drei Schaltflächen im linearen Layout hinzuzufügen. |
4 | Führen Sie die Anwendung aus, um den Android-Emulator zu starten, und überprüfen Sie das Ergebnis der in der Anwendung vorgenommenen Änderungen. |
Es folgt der Inhalt der geänderten Hauptaktivitätsdatei 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);
}
});
}
}
Es folgt der Inhalt von res/layout/activity_main.xml Datei -
<?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>
Es folgt der Inhalt von res/values/strings.xml zwei neue Konstanten definieren -
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">My Applicaiton</string>
</resources>
Es folgt der Standardinhalt von 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>
Lassen Sie uns versuchen, Ihre auszuführen My ApplicationAnwendung. Ich nehme an, Sie hatten Ihre erstelltAVDwährend der Einrichtung der Umgebung. Um die App von Android Studio aus auszuführen, öffnen Sie eine der Aktivitätsdateien Ihres Projekts und klicken Sie in
Klicken Sie nun auf Start Browser Schaltfläche, mit der ein konfigurierter Browser gestartet und http://www.example.com wie unten gezeigt angezeigt wird -
Auf ähnliche Weise können Sie die Telefonschnittstelle über die Schaltfläche Telefon starten starten, mit der Sie die bereits angegebene Telefonnummer wählen können.
Absichtsfilter
Sie haben gesehen, wie eine Absicht verwendet wurde, um eine andere Aktivität aufzurufen. Das Android-Betriebssystem verwendet Filter, um die Gruppe von Aktivitäten, Diensten und Rundfunkempfängern zu bestimmen, die die Absicht mithilfe einer bestimmten Reihe von Aktionen, Kategorien und Datenschemata verarbeiten können, die einer Absicht zugeordnet sind. Du wirst benutzen<intent-filter> Element in der Manifestdatei, um Aktionen, Kategorien und Datentypen aufzulisten, die einer Aktivität, einem Dienst oder einem Rundfunkempfänger zugeordnet sind.
Das Folgende ist ein Beispiel für einen Teil von AndroidManifest.xml Datei, um eine Aktivität anzugeben com.example.My Application.CustomActivity die durch eine der beiden genannten Aktionen, eine Kategorie und eine Daten aufgerufen werden kann -
<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>
Sobald diese Aktivität zusammen mit den oben genannten Filtern definiert ist, können andere Aktivitäten diese Aktivität entweder mit dem aufrufen android.intent.action.VIEWoder mit dem com.example.My Application.LAUNCH Aktion vorausgesetzt, ihre Kategorie ist android.intent.category.DEFAULT.
Das <data> element gibt den Datentyp an, der von der aufzurufenden Aktivität erwartet wird, und für das obige Beispiel erwartet unsere benutzerdefinierte Aktivität, dass die Daten mit "http: //" beginnen.
Es kann vorkommen, dass eine Absicht die Filter von mehr als einer Aktivität oder einem Dienst durchlaufen kann. Der Benutzer wird möglicherweise gefragt, welche Komponente aktiviert werden soll. Eine Ausnahme wird ausgelöst, wenn kein Ziel gefunden werden kann.
Vor dem Aufrufen einer Aktivität werden folgende Android-Testprüfungen durchgeführt:
Ein Filter <intent-filter> kann wie oben gezeigt mehr als eine Aktion auflisten, diese Liste darf jedoch nicht leer sein. Ein Filter muss mindestens ein <action> -Element enthalten, andernfalls werden alle Absichten blockiert. Wenn mehr als eine Aktion erwähnt wird, versucht Android, eine der genannten Aktionen abzugleichen, bevor die Aktivität aufgerufen wird.
Ein Filter <intent-filter> kann null, eine oder mehrere Kategorien auflisten. Wenn keine Kategorie erwähnt wird, besteht Android diesen Test immer. Wenn jedoch mehr als eine Kategorie erwähnt wird, muss jede Kategorie im Intent-Objekt mit einer Kategorie im Filter übereinstimmen, damit der Kategorietest bestanden werden kann.
Jedes <data> -Element kann einen URI und einen Datentyp (MIME-Medientyp) angeben. Es gibt separate Attribute wiescheme, host, port, und pathfür jeden Teil der URI. Ein Intent-Objekt, das sowohl einen URI als auch einen Datentyp enthält, besteht den Datentypteil des Tests nur, wenn sein Typ mit einem im Filter aufgelisteten Typ übereinstimmt.
Beispiel
Das folgende Beispiel ist eine Modifikation des obigen Beispiels. Hier sehen wir, wie Android Konflikte löst, wenn eine Absicht zwei in definierte Aktivitäten aufruft, und wie eine benutzerdefinierte Aktivität mithilfe eines Filters aufgerufen wird. Die dritte ist ein Ausnahmefall, wenn Android keine geeignete Aktivität für eine Absicht definiert.
Schritt | Beschreibung |
---|---|
1 | Sie werden Android Studio verwenden, um eine Android-Anwendung zu erstellen und sie unter dem Paket com.example.tutorialspoint7.myapplication als Meine Anwendung zu benennen. . |
2 | Ändern src / Main / Java / MainActivity.java - Datei und fügen Sie den Code drei Hörer definiert in Layout - Datei entsprechend den drei Tasten zu definieren. |
3 | Fügen Sie eine neue Datei src / Main / Java / CustomActivity.java hinzu , um eine benutzerdefinierte Aktivität zu erhalten, die von verschiedenen Absichten aufgerufen wird. |
4 | Ändern Sie die Layout-XML-Datei res / layout / activity_main.xml , um drei Schaltflächen im linearen Layout hinzuzufügen. |
5 | Fügen Sie eine XML-Layoutdatei res / layout / custom_view.xml hinzu , um eine einfache <TextView> hinzuzufügen, mit der die übergebenen Daten absichtlich angezeigt werden. |
6 | Ändern AndroidManifest.xml hinzufügen <Intent-Filter> Regeln für Ihre Absicht Aktivität aufzurufen Gewohnheit zu definieren. |
7 | Führen Sie die Anwendung aus, um den Android-Emulator zu starten, und überprüfen Sie das Ergebnis der in der Anwendung vorgenommenen Änderungen. |
Es folgt der Inhalt der geänderten Hauptaktivitätsdatei 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);
}
});
}
}
Es folgt der Inhalt der geänderten Hauptaktivitätsdatei 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());
}
}
Es folgt der Inhalt von res/layout/activity_main.xml Datei -
<?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>
Es folgt der Inhalt von res/layout/custom_view.xml Datei -
<?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>
Es folgt der Inhalt von res/values/strings.xml zwei neue Konstanten definieren -
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">My Application</string>
</resources>
Es folgt der Standardinhalt von 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>
Lassen Sie uns versuchen, Ihre auszuführen My ApplicationAnwendung. Ich nehme an, Sie hatten Ihre erstelltAVDwährend der Einrichtung der Umgebung. Um die App in Android Studio auszuführen, öffnen Sie eine der Aktivitätsdateien Ihres Projekts und klicken Sie in
Beginnen wir nun mit der ersten Schaltfläche "Browser mit VIEW-Aktion starten". Hier haben wir unsere benutzerdefinierte Aktivität mit einem Filter "android.intent.action.VIEW" definiert, und es gibt bereits eine Standardaktivität für die von Android definierte VIEW-Aktion, die den Webbrowser startet. Daher zeigt Android die folgenden zwei Optionen an, um die von Ihnen ausgewählte Aktivität auszuwählen möchte starten.
Wenn Sie nun Browser auswählen, startet Android den Webbrowser und öffnet die Website example.com. Wenn Sie jedoch die Option IndentDemo auswählen, startet Android CustomActivity, das nur die übergebenen Daten erfasst und in einer Textansicht wie folgt anzeigt:
Gehen Sie nun mit der Schaltfläche "Zurück" zurück und klicken Sie auf die Schaltfläche "Browser mit LAUNCH-Aktion starten". Hier wendet Android einen Filter an, um Aktivität definieren auszuwählen, und startet einfach Ihre benutzerdefinierte Aktivität
Gehen Sie erneut mit der Schaltfläche "Zurück" zurück und klicken Sie auf die Schaltfläche "Ausnahmebedingung". Hier versucht Android, einen gültigen Filter für die angegebene Absicht zu finden, findet jedoch keine gültige Aktivität definiert, da diesmal Daten als verwendet wurden https Anstatt von http Obwohl wir eine korrekte Aktion ausführen, löst Android eine Ausnahme aus und zeigt den folgenden Bildschirm an: