Android - Intents und Filter

Ein Android Intent ist eine abstrakte Beschreibung einer Operation durchgeführt werden. Es kann mit verwendet werden startActivity, um eine Aktivität zu starten, broadcastIntent, um es allen interessierten BroadcastReceiver Komponenten zu senden und Startservice (Intent)oder bindService (Intent, ServiceConnection, int) mit einem Hintergrunddienst zu kommunizieren.
Die Absicht selbst, ein Intent Objekt, ist ein passiver Datenstruktur hält eine abstrakte Beschreibung einer Operation durchgeführt werden.
Zum Beispiel, nehmen wir an, dass Sie eine Aktion, die eine E-Mail-Client zu starten muss und sendet eine E-Mail mit Ihrem Android-Gerät zu haben. Zu diesem Zweck würde Ihre Aktivität ein ACTION_SEND zusammen mit den entsprechenden Nachricht chooser, auf die Android Intent Resolver. Die angegebene Auswahl gibt die richtige Schnittstelle für den Benutzer zu holen, wie Sie Ihre E-Mail-Daten zu senden.
Intent email = new Intent (Intent.ACTION_SEND, Uri.parse ("mailto:"));
email.putExtra (Intent.EXTRA_EMAIL, Empfänger);
email.putExtra (Intent.EXTRA_SUBJECT, subject.getText () toString ().);
email.putExtra (Intent.EXTRA_TEXT, body.getText () toString ().);
startActivity (Intent.createChooser (E-Mail, "Wählen Sie eine E-Mail-Client von ..."));
Obige Syntax ruft startActivity Methode, um eine E-Mail-Aktivität zu starten und Ergebnis sollte wie unten gezeigt werden

Beispielsweise wird angenommen, dass Sie eine Aktion, die URL in einem Web-Browser auf Ihrem Android-Gerät zu öffnen Bedürfnisse haben. Zu diesem Zweck werden Ihre Aktivität ACTION_WEB_SEARCH Intent mit dem Android Intent Resolver schicken, um bestimmten URL im Web-Browser zu öffnen. Die Intent Resolver analysiert durch eine Liste von Aktivitäten und wählt die am besten passen würde Ihre Absicht, in diesem Fall, den Web-Browser Activity.Die Intent Resolver läuft dann Ihre Web-Seite an den Web-Browser und startet den Web-Browser-Aktivität.
String q = "tutorialspoint";
Absicht Absicht = new Intent (Intent.ACTION_WEB_SEARCH);
intent.putExtra (SearchManager.QUERY, q);
startActivity (Vorsatz);
Beispiel oben wird als Such tutorialspoint auf Android Suchmaschinen und gibt das Ergebnis der tutorialspoint in Ihrem Aktivitäts
Es gibt separate Mechanismen für die Bereitstellung von Absichten, um jede Art von Bauteil - Aktivitäten, Dienste und Rundfunkempfängern.
Sr.NoVerfahren & Beschreibung
1Context.startActivity ()
Die Intent-Objekt wird an diese Methode übergeben, um eine neue Aktivität zu starten oder sich eine bestehende Aktivität, um etwas Neues zu tun.
2Context.startService ()
Die Intent-Objekt wird an diese Methode, um einen Dienst zu starten oder zu liefern neue Anweisungen zu einer laufenden Dienst übergeben.
3Context.sendBroadcast ()
Die Intent-Objekt wird an diese Methode übergeben, um die Nachricht an alle interessierten Rundfunkempfänger zu liefern.

Intent Objekte

Eine Intent-Objekt ist ein Bündel von Informationen, die von der Komponente, die die Absicht sowie Informationen, die die Android-System verwendet, erhält verwendet wird.
Eine Intent-Objekt kann die folgenden Komponenten auf, was sie kommuniziert oder gehen zu führen enthalten -

Handeln

Dies ist verbindlicher Teil der Intent-Objekt und ist eine Zeichenfolge, die Benennung der Aktion durchgeführt werden soll - oder, im Falle von Broadcast Absichten, die Aktion, die stattgefunden und wird ausgewiesen. Die Aktion bestimmt weitgehend, wie der Rest der Absicht Objekt strukturiert ist. Die Intent-Klasse definiert eine Reihe von Aktionskonstanten entsprechend unterschiedlichen Absichten. Hier ist eine Liste von Android Intent Standardaktionen
Die Handlung spielt in einem Intent Aufgabe kann durch die setAction () -Methode festgelegt und von getAction gelesen werden ().

Daten

Fügt eine Datenspezifikation auf ein Vorsatz-Filter. Die Spezifikation kann nur einen Datentyp (der mimetype-Attribut), nur einen URI oder beide einen Datentyp und eine URI sein. Ein URI wird durch getrennte Attribute für jedes seiner Teile festgelegt -
Diese Attribute, die das URL-Format angeben, sind optional, aber auch gegenseitig -
  • Wenn ein System nicht für die Absicht Filter angegeben wird, werden alle anderen URI Attribute ignoriert.
  • Wenn ein Host nicht für den Filter angegeben, werden die Port-Attribut und alle Pfadattribute ignoriert.
Die setData () Methode gibt Daten nur als URI, setType () gibt es nur als MIME-Typ und setDataAndType () gibt es sowohl als URI und ein MIME-Typ. Die URI wird von getData () gelesen und die Art von getType ().
Einige Beispiele von Maßnahmen / Datenpaare sind -
SNAction / Daten Pair & Beschreibung
1ACTION_VIEW Inhalt: // Kontakte / Personen / 1
Zeigen Sie Informationen über die Person, deren Kennung "1" ist.
2ACTION_DIAL Inhalt: // Kontakte / Personen / 1
Zeigen Sie das Telefonwahlgerät mit der Person ausgefüllt.
3ACTION_VIEW tel: 123
Zeigen Sie das Telefonwahlgerät mit der angegebenen Nummer in gefüllt.
4ACTION_DIAL tel: 123
Zeigen Sie das Telefonwahlgerät mit der angegebenen Nummer in gefüllt.
5ACTION_EDIT Inhalt: // Kontakte / Personen / 1
Bearbeiten Sie Informationen über die Person, deren Kennung "1" ist.
6ACTION_VIEW Inhalt: // Kontakte / people /
Zeigen Sie eine Liste von Personen, die der Benutzer durch zu suchen.
7ACTION_SET_WALLPAPER
Show-Einstellungen für die Wahl Tapete
8ACTION_SYNC
Es geht um synchron die Daten ist Konstanter Wertandroid.intent.action.SYNC
9ACTION_SYSTEM_TUTORIAL
Es wird die Plattform definierten Tutorial (Standard Tutorial oder Start-up-Tutorial) starten
10ACTION_TIMEZONE_CHANGED
Es deutet an, wenn Zeitzone geändert hat
11ACTION_UNINSTALL_PACKAGE
Es wird verwendet, um Standard-Deinstallationsprogramm ausführen

Rubrik

Die Kategorie ist ein optionaler Teil der Intent-Objekt und es ist eine Zeichenfolge zusätzliche Informationen über die Art der Komponente, die die Absicht zu behandeln sollten enthalten. Die addCategory () Methode setzt eine Kategorie in einer Intent-Objekt, removeCategory () eine Kategorie zuvor gegeben, und getCategories (löscht) wird die Menge aller Kategorien derzeit im Objekt. Hier ist eine Liste von Android Intent Standard-Kategorien.
Sie können Einzelheiten über Intent Filter im folgenden Abschnitt zu überprüfen, um zu verstehen, wie verwenden wir Kategorien, um entsprechende Aktivität entsprechend einer Intent auszuwählen.

Extras

Dies wird in Schlüssel-Wert-Paare für zusätzliche Informationen, die zu der Komponenten-Handhabungs die Absicht abgegeben werden sollte. Die Extras können eingestellt werden und mit Hilfe der putExtras () und getExtras () Methoden ausgelesen. Hier ist eine Liste von Android Intent Standard-Extra Daten

Flags

Diese Flags sind optional Teil der Intent-Objekt und weisen Sie den Android-System, wie man eine Aktivität zu starten, und wie sie zu behandeln, nachdem es gestartet usw.
Sr.NoFlags & Beschreibung
1FLAG_ACTIVITY_CLEAR_TASK
Wenn in der Absicht, Context.startActivity (bestanden) gesetzt ist, wird dieses Flag verursachen eine bestehende Aufgabe, die mit der Tätigkeit verbunden wäre zu klären, bevor die Aktivität gestartet werden. Das heißt, die Aktivität wird die neue Wurzel einer ansonsten leeren Aufgabe, und alle alten Aktivitäten beendet sind. Dies kann nur in Verbindung mit FLAG_ACTIVITY_NEW_TASK verwendet werden.
2FLAG_ACTIVITY_CLEAR_TOP
Wenn gesetzt, und die Aktivität an den Start ist bereits in der aktuellen Task läuft, dann statt der Einführung einer neuen Instanz dieser Aktivität, werden alle anderen Aktivitäten auf es geschlossen werden, und dies Intent werden der (jetzt geliefert werden oben) alte Tätigkeit als neuer Intent.
3FLAG_ACTIVITY_NEW_TASK
Dem Benutzer eine Liste von verschiedene Dinge, die getan werden können, die sonst laufen völlig unabhängig von der Aktivität starten sie sie geben: Dieses Flag wird in der Regel durch Aktivitäten, die zu einem "launcher" style Verhalten präsentieren wollen verwendet.

Komponentenname

Dieses optionale Feld ist ein Android Component Objekt, das entweder, Dienstleistung oder BroadcastReceiver Klasse. Wenn es gesetzt ist, ist es die Absicht Objekt auf eine Instanz der angegebenen Klasse geliefert sonst Android nutzt andere Informationen in der Intent Aufgabe, ein geeignetes Ziel zu lokalisieren.
Der Komponentenname wird durch setComponent (), setClass () oder setClassName () durch getComponent gesetzt und gelesen ().

Arten von Intents

Es gibt folgende zwei Arten von Absichten von Android unterstützt
Absicht

Explizite Intents

Explizite Absicht gehen, um innere Welt der Applikation verbunden werden, nehme an, wenn Sie eine Aktivität auf eine andere Tätigkeit zu verbinden will, können wir dieses Angebot durch ausdrückliche Absicht zu tun, Bild unten verbindet ersten Aktivität zur zweiten Aktivität, indem Sie auf drücken.
Explizite Intents
Diese Absichten bezeichnen die Zielkomponente durch seinen Namen, und sie werden in der Regel für die Anwendung-interne Nachrichten verwendet - wie zB eine Tätigkeit ausgehend eine untergeordnete Dienst oder die Einleitung einer Schwester Aktivität. Zum Beispiel -
// Explizite Intent durch die Angabe seiner Klassennamen
Intent i = new Intent (FirstActivity.this, SecondAcitivity.class);

// Startet TargetActivity
startActivity (i);

Implizite Intents

Diese Absichten nicht nennen ein Ziel und das Feld für die Komponentenname wird leer gelassen. Implizite Hinsicht 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);
Obige Code wird Ergebnis zu liefern, wie unten gezeigt
Absicht
Die Zielkomponente, die die Absicht kann der Einsatz erhält getExtras ()Methode, um die zusätzlichen Daten, die von der Quellkomponente geschickt zu bekommen. Zum Beispiel -
// Bundle-Objekt zu erhalten an geeigneter Stelle im Code
Bündeln Sie Extras = getIntent () getExtras ().

// Extrahieren von Daten mit übergeben Schlüssel
String value1 = extras.getString ("Key1");
String value2 = extras.getString ("Key2");

Beispiel

Folgendes Beispiel zeigt die Funktionalität eines Android Intent, verschiedene Android integrierten Anwendungen zu starten.
SchrittBezeichnung
1Sie werden Android-Studio IDE verwenden, um ein Android-Anwendung erstellen und benennen es als meine Anwendung unter einem Paketcom.example.saira_000.myapplication. Bei der Erstellung dieses Projekt, stellen Sie sicher SDK Ziel und Kompilieren Sie mit bei der neuesten Version des Android SDK zu höheren Ebenen der APIs verwenden.
2Ändern src / / java main / MainActivity.java Datei und fügen Sie den Code in zwei Zuhörer entspricht zwei Tasten dh definieren. Starten Sie Browser und starten Phone.
3Ändern Sie das Layout XML-Datei res / layout / activity_main.xml zu drei Schaltflächen in lineare Layout hinzuzufügen.
4Führen Sie die Anwendung auf Android-Emulator zu starten, und überprüfen Sie das Ergebnis der Änderungen in der Anwendung durchgeführt.
Im Anschluss ist der Gehalt des modifizierten Haupttätigkeit Datei src / com.example.My Anwendung / MainActivity.java.
Paket com.example.saira_000.myapplication;

Import android.content.Intent;
Import android.net.Uri;
Import android.support.v7.app.ActionBarActivity;
Import android.os.Bundle;
Import android.view.Menu;
Import android.view.MenuItem;
Import android.view.View;
Import android.widget.Button;Import android. Widget. Knopf;


public class MainActivity erstreckt ActionBarActivity {öffentliche  Klasse  MainActivity  erstreckt  ActionBarActivity  {
   Button b1, b2;Button b1, b2;
   
   OverrideOverride
   protected void onCreate (Bundle savedInstanceState) {geschützt  nichtig onCreate (Bundle savedInstanceState)  {
      super.onCreate (savedInstanceState);Super. onCreate (savedInstanceState);
      setContentView (R.layout.activity_main);(R. Layout. Activity_main);
      
      b1 = (Button) findViewById (R.id.button);= (Knopf) findViewById (R. Id. Taste);
      b1.setOnClickListener (neu View.OnClickListener () {. SetOnClickListener (neue  Ansicht. OnClickListener ()  {
         
         OverrideOverride
         public void OnClick (Blick v) {öffentliche  nichtig onClick (Blick v)  {
            Intent i = new Intent (android.content.Intent.ACTION_VIEW, Uri.parse ("http://www.example.com"));Intent i =  neue  Intent (android. Gehalt. Intent. ACTION_VIEW,  Uri. Parsen ("http://www.example.com"));
            startActivity (i);(I);
         }}
      });});
      
      b2 = (Button) findViewById (R.id.button2);= (Knopf) findViewById (R. Id. Button2);
      b2.setOnClickListener (neu View.OnClickListener () {. SetOnClickListener (neue  Ansicht. OnClickListener ()  {
         OverrideOverride
         public void OnClick (Blick v) {öffentliche  nichtig onClick (Blick v)  {
            Intent i = new Intent (android.content.Intent.ACTION_VIEW, Uri.parse ("tel: 9510300000"));Intent i =  neue  Intent (android. Gehalt. Intent. ACTION_VIEW, Uri. Parsen ("tel: 9510300000"));
            startActivity (i);(I);
         }}
      });});
   }}
   
   OverrideOverride
   public boolean onCreateOptionsMenu (Menü-Menü) {öffentliche  boolean onCreateOptionsMenu (Menü Menü)  {
      // Pumpen Sie das Menü; dies fügt Elemente in die Aktionsleiste, wenn es vorhanden ist.// Pumpen Sie das Menü; dies fügt Elemente in die Aktionsleiste, wenn es vorhanden ist.
      . getMenuInflater () aufzublasen (R.menu.menu_main, Menü);. () Aufzublasen (R. Menü. Menu_main, Menü);
      return true;Rück  wahren;
   }}
   
   OverrideOverride
   public boolean onOptionsItemSelected (MenuItem Artikel) {öffentliche  boolean onOptionsItemSelected (MenuItem Artikel)  {
   // Handle Aktionsleiste Element klickt hier. Die Aktionsleiste wird// Handle Aktionsleiste Element klickt hier. Die Aktionsleiste wird
   // Automatisch verarbeiten klickt auf den Home / Up-Taste, so lange,// Automatisch verarbeiten klickt auf den Home / Up-Taste, so lange,
   // Wie Sie eine übergeordnete Aktivität in AndroidManifest.xml angeben.// Wie Sie eine übergeordnete Aktivität in AndroidManifest.xml angeben.
  
  int id = item.getItemId ();int id = Artikel. GetItemID ();
   
   // noinspection SimplifiableIfStatement// noinspection SimplifiableIfStatement
   if (id == R.id.action_settings) {wenn  (id == R. id. action_settings)  {
         return true;Rück  wahren;
      }}
      Rück super.onOptionsItemSelected (Artikel); Rücksuper. onOptionsItemSelected (Artikel);
   }}
}}
Im Anschluss wird der Inhalt sein res / layout / activity_main.xml Datei -
<RelativeLayout xmlns: android = "http://schemas.android.com/apk/res/android"
   xmlns: Werkzeuge = "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" 
   Werkzeuge: context = ". MainActivity">
   
   <Textview
      Android: id = "@ + id / textView1"
      Android: layout_width = "wrap_content"
      Android: layout_height = "wrap_content"
      Android: text = "Intent Beispiel"
      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 Punkt"
      Android: textcolor = "# ff87ff09"
      Android: textsize = "30DP"
      Android: layout_below = "@ + id / textView1"
      Android: layout_centerHorizontal = "true" />
      
   <Image
      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 / Editieren"
      Android: layout_below = "@ + id / Imagebutton"
      Android: layout_alignRight = "@ + id / Imagebutton"
      Android: layout_alignEnd = "@ + id / Imagebutton" />
      
   <Taste
      Android: layout_width = "wrap_content"
      Android: layout_height = "wrap_content"
      Android: text = "Start Browser"
      Android: id = "@ + id / Schaltfläche"
      Android: layout_alignTop = "@ + id / Editieren"
      Android: layout_alignRight = "@ + id / textView1"
      Android: layout_alignEnd = "@ + id / textView1"
      Android: layout_alignLeft = "@ + id / Imagebutton"
      Android: layout_alignStart = "@ + id / Imagebutton" />
      
   <Taste
      Android: layout_width = "wrap_content"
      Android: layout_height = "wrap_content"
      Android: text = "Phone starten"
      Android: id = "@ + id / button2"
      Android: layout_below = "@ + id / Schaltfläche"
      Android: layout_alignLeft = "@ + id / Schaltfläche"
      Android: layout_alignStart = "@ + id / Schaltfläche"
      Android: layout_alignRight = "@ + id / textView2"
      Android: layout_alignEnd = "@ + id / textView2" />
</ RelativeLayout>
Im Anschluss wird der Inhalt sein res / Werte / strings.xml zwei neue Konstanten definieren -
<? xml version = "1.0" encoding = "utf-8"?>
<Ressourcen>
   <string name = "app_name"> Mein applicaiton </ string>
   <string name = "action_settings"> Einstellungen </ string>
</ resources>
Im Folgenden ist der Standardinhalt der AndroidManifest.xml -
<? xml version = "1.0" encoding = "utf-8"?>
<manifest xmlns: android = "http://schemas.android.com/apk/res/android"
   Paket = "com.example.My Application"
   Android: Versioncode = "1"
   Android: versionname = "1.0">
   
   <Verwendungen-sdk
      Android: minSdkVersion = "8"
      Android: targetSdkVersion = "22" />
      
   <application
      Android: allowBackup = "true"
      Android: icon = "@ drawable / ic_launcher"
      Android: label = "@ String / app_name"
      Android: theme = "@ style / AppTheme">
      
      <Aktivität
         Android: name = "com.example.saira_000.myapplication.MainActivity"
         Android: label = "@ String / app_name">
      
         <Vorsatz-Filter>
            <Action android: name = "android.intent.action.MAIN" />
            <Kategorie android: name = "android.intent.category.LAUNCHER" />
         </ intent-filter>
      
      </ Tätigkeit>
      
   </ application>
</ manifest>
Lasst uns versuchen, Ihre Lauf My Application Anwendung. Ich nehme an, Sie geschaffen hatte AVD dabei Umgebungskonfiguration. Um die App vom Android Studio ausführen, öffnen Sie einen der Aktivität Dateien Ihres Projekts und klicken Sie auf Eclipse-Run IconAusführen-Symbol aus der toolbar.Android Studio installiert die App auf Ihrem AVD und startet es und wenn alles in Ordnung ist mit der Einrichtung und Anwendung, wird es folgende Emulator anzuzeigen Fenster -
Android Intent Bildschirm
Klicken Sie nun auf Start-Browser-Taste, die einen Browser konfiguriert zu starten und http://www.example.com wie unten gezeigt wird -
Android Intent Browser
Ähnlich können Sie Telefonschnittstelle mit Start Telefontaste, die Ihnen erlauben, schon gegeben Telefonnummer zu wählen wird gestartet.

Intent Filter

Sie haben gesehen, wie ein Intent wurde verwendet, um eine andere Tätigkeit nennen. Android OS verwendet Filter, um den Satz von Aktivitäten, Dienste und Rundfunkempfängern, die die Absichtserklärung mit Hilfe von festgelegten Reihe von Maßnahmen, Kategorien, Datenschema mit der Absicht verbunden sind verarbeiten kann lokalisieren. Sie verwenden <intent-filter> Element in der Manifest-Datei, Liste unten Aktionen, Kategorien und Datentypen mit einer Tätigkeit, Service oder Rundfunkempfänger verbunden.
Es folgt ein Beispiel eines Teils AndroidManifest.xml-Datei, um eine Aktivität angeben com.example.My Application.CustomActivity, die von einem der beiden genannten Aktionen, eine Kategorie und eine Daten aufgerufen werden kann -
<Aktivität Android: name = "CustomActivity."
   Android: label = "@ String / app_name">
   
   <Vorsatz-Filter>
      <Action android: name = "android.intent.action.VIEW" />
      <Action android: name = "com.example.My Application.LAUNCH" />
      <Kategorie android: name = "android.intent.category.DEFAULT" />
      <Daten Android: scheme = "http" />
   </ intent-filter>
   
</ Tätigkeit>
Sobald diese Aktivität zusammen mit oben genannten Filter definiert ist, wird anderen Aktivitäten in der Lage, diese Aktivitäten entweder mit dem Aufrufenandroid.intent.action.VIEW, oder mit Hilfe der com.example.My Application.LAUNCH Aktion bereitgestellt ihrer Kategorie ist android.intent.category.DEFAULT.
Die <data> -Element gibt den Datentyp durch die Aktivität erwartet, genannt werden und für obige Beispiel unsere eigene Aktivität erwartet, dass die Daten, die mit dem Start "http: //"
Es kann sein, eine Situation, die eine Absicht kann durch die Filter von mehr als einer Tätigkeit oder Dienstleistung übergeben, kann der Benutzer gefragt, welche Komponente zu aktivieren. Eine Ausnahme ausgelöst wird, wenn kein Ziel gefunden werden kann.
Es gibt folgende Test Android Kontrollen vor dem Aufruf eine Tätigkeit -
  • Ein Filter <intent-filter> kann mehr als eine Aktionsliste wie oben gezeigt, aber diese Liste darf nicht leer sein; ein Filter muss mindestens ein <action> -Element enthalten, sonst wird es alle Absichten zu blockieren. Wenn mehr als ein Handlungen werden dann erwähnt Android versucht, eine der genannten Maßnahmen entsprechen vor dem Aufruf der Aktivität.
  • Ein Filter <intent-filter> kann kein, ein oder mehrere Kategorien auflisten. wenn es keine Kategorie erwähnte dann Android immer diesen Test zu bestehen, aber wenn mehr als eine Kategorien werden dann für eine Absicht, die Kategorie Test erwähnt, muss jeder Kategorie in der Intent-Objekt eine Kategorie in der Filter entsprechen.
  • Jedes Element <data> können eine URI und einen Datentyp (MIME-Medientypen) festlegen. Es gibt separate Attribute wie Schema, Host, Port und Pfad für jeden Teil der URI. Eine Intent-Objekt, das sowohl eine URI und einen Datentyp enthält, übergibt den Datentyp Teil des Tests nur, wenn der Typ entspricht einem Typ im Filter aufgelistet.

Beispiel

Folgende Beispiel ist eine Modifikation des obigen Beispiels. Hier werden wir sehen, wie Android löst Konflikte, wenn eine Absicht aufruft zwei Aktivitäten in definierten, neben, wie eine benutzerdefinierte Aktivität aufzurufen Verwendung eines Filters und dritte ist ein Ausnahmefall, wenn Android nicht Datei entsprechende Aktivität für eine Absicht definiert.
SchrittBezeichnung
1Sie werden Android Studio verwenden, um ein Android-Anwendung erstellen und benennen es als meine Anwendung unter einem Paketcom.example.saira_000.myapplication. Bei der Erstellung dieses Projekt, stellen Sie sicher SDK Ziel und Kompilieren Sie mit bei der neuesten Version des Android SDK zu höheren Ebenen der APIs verwenden.
2Ändern src / main / Java / MainActivity.java Datei und fügen Sie den Code zu drei Zuhörer, die den drei Schaltflächen in Layout-Datei definiert definieren.
3Fügen Sie einen neuen src / main / Java / CustomActivity.java Datei, um eine benutzerdefinierte Aktivität, die durch unterschiedliche Absichten aufgerufen wird haben.
4Ändern Sie das Layout XML-Datei res / layout / activity_main.xml zu drei Schaltflächen in lineare Layout hinzuzufügen.
5In einem Layout XML-Datei res / layout / custom_view.xml ein einfaches hinzufügen <Textview>, um die übergebenen Daten vorsätzlich zu zeigen.
6Ändern AndroidManifest.xml <Vorsatz-Filter>, um in den Regeln für Ihre Absicht, benutzerdefinierte Aktivität aufrufen zu definieren.
7Führen Sie die Anwendung auf Android-Emulator zu starten, und überprüfen Sie das Ergebnis der Änderungen in der Anwendung durchgeführt.
Im Folgenden ist der Gehalt des modifizierten Haupttätigkeit Datei src /MainActivity.java.
Paket com.example.saira_000.myapplication;

Import android.content.Intent;
Import android.net.Uri;
Import android.support.v7.app.ActionBarActivity;
Import android.os.Bundle;
Import android.view.Menu;
Import android.view.MenuItem;
Import android.view.View;
Import android.widget.Button;


public class MainActivity erstreckt ActionBarActivity {
   Taste 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 (neu View.OnClickListener () {
      
         Override
         public void OnClick (Blick 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 (neu View.OnClickListener () {
      
         Override
         public void OnClick (Blick v) {
            Intent i = new Intent ("com.example.My Application.LAUNCH", Uri.parse ("http://www.example.com"));
            startActivity (i);
         }
      });
      
      b3 = (Button) findViewById (R.id.button3);
      b3.setOnClickListener (neu View.OnClickListener () {
      
         Override
         public void OnClick (Blick v) {
            Intent i = new Intent ("com.example.My Application.LAUNCH", Uri.parse ("https://www.example.com"));
            startActivity (i);
         }
      });
   }
   
   Override
   public boolean onCreateOptionsMenu (Menü-Menü) {
      // Pumpen Sie das Menü; dies fügt Elemente in die Aktionsleiste, wenn es vorhanden ist.
      . getMenuInflater () aufzublasen (R.menu.menu_main, Menü);
      return true;
   }
   
   Override
   public boolean onOptionsItemSelected (MenuItem Artikel) {
      // Handle Aktionsleiste Element klickt hier. Die Aktionsleiste wird
      // Automatisch verarbeiten klickt auf den Home / Up-Taste, so lange,
      // Wie Sie eine übergeordnete Aktivität in AndroidManifest.xml angeben.
      
      int id = item.getItemId ();
      
      // noinspection SimplifiableIfStatement
      if (id == R.id.action_settings) {
         return true;
      }
      Rück super.onOptionsItemSelected (Artikel);
   }
}
Im Folgenden ist der Gehalt des modifizierten Haupttätigkeit Datei src / com.example.My Anwendung / CustomActivity.java.
Paket com.example.saira_000.myapplication;

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

public class CustomActivity erstreckt Aktivität {
   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 ());
   }
}
Im Anschluss wird der Inhalt sein res / layout / activity_main.xml Datei -
<RelativeLayout xmlns: android = "http://schemas.android.com/apk/res/android"
   xmlns: Werkzeuge = "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" 
   Werkzeuge: context = ". MainActivity">
   
   <Textview
      Android: id = "@ + id / textView1"
      Android: layout_width = "wrap_content"
      Android: layout_height = "wrap_content"
      Android: text = "Intent Beispiel"
      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 Punkt"
      Android: textcolor = "# ff87ff09"
      Android: textsize = "30DP"
      Android: layout_below = "@ + id / textView1"
      Android: layout_centerHorizontal = "true" />
      
   <Image
      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 / Editieren"
      Android: layout_below = "@ + id / Imagebutton"
      Android: layout_alignRight = "@ + id / Imagebutton"
      Android: layout_alignEnd = "@ + id / Imagebutton" />
      
   <Taste
      Android: layout_width = "wrap_content"
      Android: layout_height = "wrap_content"
      Android: text = "Starten Sie die gerade mit Blick Aktion"
      Android: id = "@ + id / Schaltfläche"
      Android: layout_alignTop = "@ + id / Editieren"
      Android: layout_alignRight = "@ + id / textView1"
      Android: layout_alignEnd = "@ + id / textView1"
      Android: layout_alignLeft = "@ + id / Imagebutton"
      Android: layout_alignStart = "@ + id / Imagebutton" />
      
   <Taste
      Android: layout_width = "wrap_content"
      Android: layout_height = "wrap_content"
      Android: text = "Starten Sie die gerade mit Launch-Aktion"
      Android: id = "@ + id / button2"
      Android: layout_below = "@ + id / Schaltfläche"
      Android: layout_alignLeft = "@ + id / Schaltfläche"
      Android: layout_alignStart = "@ + id / Schaltfläche"
      Android: layout_alignRight = "@ + id / textView2"
      Android: layout_alignEnd = "@ + id / textView2" />
      
   <Taste
      Android: layout_width = "wrap_content"
      Android: layout_height = "wrap_content"
      Android: text = "außergewöhnlich guten Zustand"
      Android: id = "@ + id / button3"
      Android: layout_below = "@ + id / button2"
      Android: layout_alignLeft = "@ + id / button2"
      Android: layout_alignStart = "@ + id / button2"
      Android: layout_alignRight = "@ + id / textView2"
      Android: layout_alignEnd = "@ + id / textView2" />

</ RelativeLayout>
Im Anschluss wird der Inhalt sein 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 = "vertikal"
   Android: layout_width = "fill_parent"
   Android: layout_height = "fill_parent">
   
   <Textview Android: id = "@ + id / show_data"
      Android: layout_width = "fill_parent"
      Android: layout_height = "400dp" />
   
</ Linearlayout>
Im Anschluss wird der Inhalt sein res / Werte / strings.xml zwei neue Konstanten definieren -
<? xml version = "1.0" encoding = "utf-8"?>
<Ressourcen>
   <string name = "app_name"> My Application </ string>
   <string name = "action_settings"> Einstellungen </ string>
</ resources>
Im Folgenden ist der Standardinhalt der AndroidManifest.xml -
<? xml version = "1.0" encoding = "utf-8"?>
<manifest xmlns: android = "http://schemas.android.com/apk/res/android"
   Paket = "com.example.My Application"
   Android: Versioncode = "1"
   Android: versionname = "1.0">
   
   <Verwendungen-sdk
      Android: minSdkVersion = "8"
      Android: targetSdkVersion = "22" />
      
   <application
      Android: allowBackup = "true"
      Android: icon = "@ drawable / ic_launcher"
      Android: label = "@ String / app_name"
      Android: theme = "@ style / AppTheme">
      
      <Aktivität
         Android: name = "com.example.saira_000.myapplication"
         Android: label = "@ String / app_name">
      
         <Vorsatz-Filter>
            <Action android: name = "android.intent.action.MAIN" />
            <Kategorie android: name = "android.intent.category.LAUNCHER" />
         </ intent-filter>
      
      </ Tätigkeit>
      
      <Aktivität Android: name = "com.example.saira_000.myapplication.CustomActivity" 
         <android: label = "@ String / app_name">
      
         <Vorsatz-Filter>
            <Action android: name = "android.intent.action.VIEW" />
            <Action android: name = "com.example.saira_000.myapplication.LAUNCH" />
            <Kategorie android: name = "android.intent.category.DEFAULT" />
            <Daten Android: scheme = "http" />
         </ intent-filter>
      
      </ Tätigkeit>
      
   </ application>
</ manifest>
Lasst uns versuchen, Ihre Lauf My Application Anwendung. Ich nehme an, Sie geschaffen hatte AVD dabei Umgebungskonfiguration. Um die App vom Android Studio, öffnen Sie eine Aktivität Dateien Ihres Projekt auszuführen, und klicken Sie auf Eclipse-Run IconAusführen-Symbol in der Symbolleiste. Android Studio installiert die App auf Ihrem AVD und startet es und wenn alles in Ordnung ist mit der Einrichtung und Anwendung, wird es folgende Emulator-Fenster anzuzeigen -
Android benutzerdefinierte Aktivität
Lassen Sie uns nun mit ersten Schaltfläche "Start Browser mit Blick Aktion" zu starten. Hier haben wir unsere eigene Tätigkeit mit einem Filter "android.intent.action.VIEW" definiert, und es gibt bereits eine Standard-Aktivität gegen VIEW Maßnahmen Android definiert, startet Web-Browser, so android Displays beiden folgenden Optionen, um die Aktivität wählen wird Ihnen wollen starten.
Android Zwei Aktivitäten
Nun, wenn Sie wählen Sie Browser, dann wird Android Web-Browser und öffnen example.com Website zu starten, aber wenn Sie IndentDemo Option auswählen und Android wird CustomActivity die nichts tut, sondern nur zu erfassen gebenen Daten und Anzeigen in einem Textansicht wie folgt zu starten -
Android benutzerdefinierte Aktivität Läuft
Jetzt gehen Sie zurück wieder mit der Taste, und klicken Sie auf "Start Browser mit Launch Action" -Button, hier Android gilt Filter zu wählen, definieren Aktivität und es einfach Ihren benutzerdefinierte Aktivität
Auch hier wieder zurück mit der Taste und klicken Sie auf "Ausnahme Bedingung" -Taste, hier Android versucht, eine gültige Filter für die gegebene Absicht herauszufinden, aber es enthält keine gültige Aktivität definiert zu finden, weil wir dieses Mal haben Daten wie verwendet https statt http aber wir geben eine richtige Aktion, so dass Android eine Ausnahme auslöst und zeigt folgenden Bildschirm -
Android Exception-Bildschirm

Share on Google Plus

About ptjqatar

This is a short description in the author block about the author. You edit it by entering text in the "Biographical Info" field in the user admin panel.

1 التعليقات:

  1. Bereits mehrfach habe ich eure Tutorials zu sehr interessanten Themen gefunden und würde sie gern nutzen. Wie es aussieht, erklärt ihr alles auch klar und übersichtlich.
    Trotzdem nutzen mir die Tutorials nichts. Sie sind komplett unverständlich, denn das, was ihr darlegt, wird durch die wahllose schlechte Übersetzung ins Deutsche so verzerrt, das ich, obwohl ich es ernsthaft versucht habe, nichts umsetzen konnte.
    Das Problem liegt dabei nicht auf den allgemeinen Erklärungen. Was mir die Nutzung so erschwert , ist vor allem, dass die Schlüsselwörter und Beispiele mit "übersetzt" wurden. Beim Programmieren sind die aber nicht Deutsch. Auch z. B. Menüpunkte findet man im Android-Studio nicht, weil sie selbstverständlich englisch sind.
    Habt ihr diese Tutorials auch in Englisch? Ich würde sie wirklich gern nutzen.

    AntwortenLöschen