Latest web development tutorials

Android Intent (Absichtserklärung) und Filter (Filter)

Android Absicht ist eine abstrakte Beschreibung der Aktion, die ausgeführt werden. Es kann durch eine startActivity Aktivitäten gestartet werden, broadcastIntent Broadcast es allen interessierten Funkempfänger-Komponenten zu senden, den Start (Intent) oder bindService (Intent, ServiceConnection, int) mit Back-End-Dienste zu kommunizieren.

Vorsatzes selbst (ein Vorsatz-Objekt) ist eine passive Datenstruktur, die die abstrakte Beschreibung des Betriebs hält durchgeführt werden.

Zum Beispiel haben Sie eine aktive, öffnen Sie die E-Mail-Client und Mail an Ihrem Android-Gerät zu senden. Zu diesem Zweck müssen Sie ACTION_SEND Aktivität mit einem geeigneten Wähler auf Android Absicht Prozessor zu senden. Spezifizierte Wähler die entsprechende Schnittstelle angesichts der Benutzer selbst entscheiden kann, wie seine Nachrichtendaten zu senden.

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..."));

StartActivity Syntax, um die oben genannten Methoden für den Aufruf des E-Mail-Aktivität zu öffnen, werden die Ergebnisse den Code laufen sieht wie folgt aus:

Bild

Sie können beispielsweise einen aktiven haben, müssen Sie auf Android-Geräten über einen Browser eine URL zu öffnen. Zu diesem Zweck wird Ihre Veranstaltung ACTION_WEB_SEARCH Absicht Android Prozessoren Absicht senden bestimmten URL in Ihrem Browser zu öffnen. Prozessor Absicht durch eine Reihe von Aktivitäten zu analysieren und zu wählen, die am besten geeignete Aktivität, die Sie beabsichtigen, in diesem Fall, den Web-Browser-Aktivität. Prozessor Absicht auf Ihrer Webseite Adresse an den Web-Browser zu übergeben, und öffnen Sie die Web-Browser-Aktivität.

String q = "http://www.uprogrammer.cn";
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH );
intent.putExtra(SearchManager.QUERY, q);
startActivity(intent);

Das obige Beispiel "www.uprogrammer.cn" Suchmaschine auf Android zu finden, und gibt die Ergebnisse auf einer Keyword-Aktivitäten.

Für jede Komponente - Aktivitäten, Dienstleistungen, Broadcast-Empfänger haben einen unabhängigen Mechanismus Absicht vermitteln.

Nein. Verfahren und Beschreibung
1 Context.startActivity (): Absicht, die Methode übergeben verwendet, um eine neue Tätigkeit zu beginnen oder eine bestehende Aktivität zu tun, etwas Neues haben.
2 Context.startService (): Absicht, die Methode übergeben, initialisieren einen Service oder neue Informationen zu einem dauerhaften Service.
3 Context.sendBroadcast (): Absicht, die Methode übergeben, wird die Information an alle interessierten Rundfunkempfänger geliefert werden.

Intent Objekt

Intent Objekt ist ein Paket von Informationen für die Komponente empfängt Absichten als Android-System Informationen erhält.

Intent Objekt umfasst die folgenden Komponenten, je nachdem, was Sie kommunizieren wollen oder durchführen.

Aktion (Action)

Es ist Teil der Absicht des Objekts ist, wird es als Zeichenkette dargestellt. Intent-Sendung, die Aktion für den Fall, wird berichtet. Die Maßnahmen werden weitgehend bestimmen, wie der Rest der Absicht organisiert ist. Intent-Klasse definiert eine Reihe von Aktionen Konstanten zu unterschiedlichen Intentionen entspricht. Hier ist die Android Absicht Standard - Aktion - Liste.

Intent Objekt in Bewegung kann durch setAction () -Methode festgelegt werden, durch getAction () -Methode zu lesen.

Daten (Data)

Hinzufügen von Daten zu der Absicht der Filterspezifikationen. Diese Spezifikation kann nur ein Datentyp (wie Zelltyp-Attribut), eine URI oder beide Datentypen und URI enthalten. Durch den URI Attribute unterschiedlicher Abschnitte angeben.

Diese Attribute geben Sie das Format der URL ist optional, aber auch unabhängig voneinander -

  • Wenn der Intent-Filter-Modus nicht angegeben ist, werden alle anderen URI-Eigenschaft ignoriert.
  • Wenn Sie nicht über einen Host für den Filter, Port Attribute angeben, und den Pfad Attribute werden ignoriert.

setData () -Methode kann nur URI-Daten angegeben werden, setType () kann nur die Art von Meta-Daten angeben, setDataAndType () angegebenen Typen URI und Element können gleichzeitig. URI von getData () zu lesen, geben Sie durch getType () zu lesen.

Hier sind einige Beispiele für Aktionen / Datensatz -

Nein. Action / Daten und eine Beschreibung
1 ACTION_VIEW Inhalt: // Kontakte / Personen / 1: 1 ist für die Benutzer-ID-Informationen angezeigt.
2 ACTION_DIAL Inhalt: // Kontakte / Personen / 1: Show Wählhilfe, und füllen Sie die Benutzerdaten ein.
3 ACTION_VIEW tel: 123: anzeigen Wählhilfe, und füllen Sie die angegebene Nummer.
4 ACTION_DIAL tel: 123: anzeigen Wählhilfe, und füllen Sie die angegebene Nummer.
5 ACTION_EDIT Inhalt: // Kontakte / people / 1: Bearbeiten der Benutzer-ID-Information 1.
6 ACTION_VIEW Inhalt: // Kontakte / people /: eine Liste der Benutzer angezeigt zu sehen.
7 ACTION_SET_WALLPAPER: Wählen Sie die Einstellung Tapete Anzeige.
8 ACTION_SYNC: Synchronisieren von Daten, Standardwert: android.intent.action.SYNC
9 ACTION_SYSTEM_TUTORIAL: Offene Plattform Definition Tutorial (oder Standardstart-Tutorial Tutorial)
10 ACTION_TIMEZONE_CHANGED: Wenn die Zeitzone Benachrichtigung geändert wird
11 ACTION_UNINSTALL_PACKAGE: führen Sie das Deinstallationsprogramm Standard

Kategorie

Kategorie ist ein optionaler Bestandteil des Vorsatzes, ist eine Zeichenfolge, die über die Arten von Komponenten enthält weitere Informationen verarbeitet Absichten zu sein. addCategory () -Methode mit der Absicht, das Hinzufügen der Objektkategorie, removeCategory () -Methode vor dem Hinzufügen von Kategorien zu entfernen, getCategories () Ruft alle auf die Absicht Objektkategorien. Hier ist die Android Absicht Standard - Kategorie - Liste.

Sie können die folgenden Abschnitte Absicht Filter sehen, zu verstehen, wie wir Kategorien durch eine entsprechende Absicht verwenden Sie die entsprechenden Aktivitäten zu wählen.

Weitere Daten

Dies ist auf die Montage übergeben mit der Absicht zu drücken, um zusätzliche Informationen hierin beschrieben zu behandeln. Sets von putExtras (), getExtras () -Methode zu lesen. Hier ist die Android Absicht Standard zusätzliche Daten - Liste.

Mark

Diese Tags sind ein optionaler Teil der Absicht, was das Android-System, wie die Aktivität zu initiieren, wie nach Beginn der Behandlung.

Nein. Tags und Beschreibungen
1 FLAG_ACTIVITY_CLEAR_TASK: Wenn die Absicht, und durch Context.startActivity, dieser Tag wird alle bestehenden Aufgaben verursachen mit der Tätigkeit verbundenen gelöscht wird vor Beginn der Veranstaltung. Die Aktivitäten werden die Wurzel eines leeren Aufgabe sein, alle die alte Tätigkeit beendet. Die Benutzung der Marke kann mit FLAG_ACTIVITY_NEW_TASK kombiniert werden.
2 FLAG_ACTIVITY_CLEAR_TOP: Wenn dieses Flag gesetzt ist, wird das Ereignis in der Task gestartet werden, die derzeit ausgeführt wird. Diese Krankheit ist nicht eine neue Aktivität Instanz starten, alle Aktivitäten auf sie ausgeschaltet ist, diese Absicht als eine neue Absicht, die bestehende (derzeit an der Spitze) Aktivitäten geliefert wird.
3 FLAG_ACTIVITY_NEW_TASK: Dieser Tag wird für solche Aktivitäten "Starter" Stil des Verhaltens eingesetzt: Nutzer von Daten mit einem Lauf zu schaffen, unabhängig durchgeführt werden, und ein separates Kinder komplette Aktivitäten starten.

Komponentenname

Component Object Name ist ein optionales Feld repräsentative Tätigkeiten, Dienstleistungen oder Rundfunkempfänger Klasse. Wenn gesetzt, wird das Intent-Objekt übergeben Andernfalls andere Absichten Android andere Informationen ein geeignetes Ziel zu lokalisieren entworfen, um eine Instanz der Klasse zu implementieren. Komponentenname von setComponent (), setClass () oder setClassName () einzurichten, () erhalten durch GetComponent.


Art of Intent

Android unterstützt zwei Arten von Absichten.

Bild

explizite Absicht

Die innere Welt einer ausdrücklichen Absicht, die Anwendung zu verbinden, wenn Sie eine Aktivität an eine andere Aktivität zu verbinden müssen, wir Absicht zeigen kann, ist die folgende Abbildung zeigt die Verbindung mit der Taste erste Aktivität auf die zweite Aktivität klicken.

Bild

Die Absicht der Komponente mit Namen Targeting, in der Regel für die Anwendung von internen Informationen verwendet - wie zum Beispiel eine Nebentätigkeit oder eine Tätigkeit ein Geschwister Aktivitäten starten starten. Zum Beispiel:

// 通过指定类名的显式意图
Intent i = new Intent(FirstActivity.this, SecondAcitivity.class);

// 启动目标活动
startActivity(i);

Implizite Absicht

Die Absicht, diese Ziele zu nennen nicht, die Domain Name der Komponente ist leer. Implicit Absichten werden häufig verwendet, um Komponenten von 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 wird die folgenden Ergebnisse gegeben werden:

Bild

Zielkomponente erhält Absicht, können Sie getExtras () Methode, um zusätzliche Daten von der Quellkomponente übertragen zu erhalten. Zum Beispiel:

// 在代码中的合适位置获取包对象
Bundle extras = getIntent().getExtras();

// 通过键解压数据
String value1 = extras.getString("Key1");
String value2 = extras.getString("Key2");

Beispiele

Das folgende Beispiel zeigt die Verwendung von Android Absicht eine Vielzahl von Android-Funktionen integrierte Anwendungen zu starten.

Schritt Beschreibung
1 Android Studio IDE cn.uprogrammer.intentfilter namens eine Android-Anwendung, mit dem Namen Intent-Filter, Paket zu erstellen. Wenn Sie ein Projekt erstellen, stellen Sie sicher, dass das Ziel SDK und kompilieren mit der neuesten Version des Android SDK verwenden erweiterte API.
2 Ändern src / cn.uprogrammer.intentfilter / MainActivity.java-Datei und fügen Sie den Code definiert zwei Zuhörer zu den entsprechenden beiden Tasten "Start Browser" und "Start Call"
3 Ändern res / Layout / activity_main.xml Layout-Dateien, Online-Layout drei Schaltflächen hinzufügen.
4 Starten Sie Android-Emulator die Anwendung und überprüfen Sie die Ergebnisse von Änderungen an der Anwendung auszuführen.

Im Folgenden ist der Inhalt von src / cn.uprogrammer.intentfilter / MainActivity.java Datei:

package cn.uprogrammer.intentfilter;

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 extends ActionBarActivity {
    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.uprogrammer.cn"));
                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);
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.

        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

Hier ist der Inhalt der res / Layout / activity_main.xml Datei:

<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="意图实例"
        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="www.uprogrammer.cn"
        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/ic_launcher"
        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="启动浏览器"
        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="启动电话"
        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>

Hier ist der Inhalt der res / Werte / Strings / xml, die zwei neue Konstanten.

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">Intent filter</string>
   <string name="action_settings">Settings</string>
</resources>

Im Folgenden ist der Standard AndroidManifest.xml Inhalt:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.uprogrammer.intentfilter"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="22" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Base.Theme.AppCompat" >

        <activity
            android:name="cn.uprogrammer.intentfilter.MainActivity"
            android:label="@string/app_name" >

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

        </activity>

    </application>
</manifest>

Lassen Sie uns einfach eine modifizierte Intent-Filter-Anwendungen ausführen. Ich nehme an, Sie AVD während der Installationsumgebung erstellt haben. Öffnen Sie das Projekt in der aktiven Datei, klicken Sie in der Symbolleiste auf Bild Icon ausführen, um die Anwendung im Android Studio. Android Studio installieren Sie die Anwendung auf dem AVD und gestartet. Wenn alles gut geht, wird es auf dem Emulator-Fenster angezeigt werden, wie folgt:

Bild

Klicken Sie nun auf den "Start Browser" Button, der einen Browser starten, je nach Konfiguration und Anzeige http://www.uprogrammer.cn wie folgt:

Bild

In ähnlicher Weise können Sie auf den "Start Call" klicken, um die Telefonschnittstelle zu öffnen, die Sie Telefonnummern können zu wählen gegeben wurden.


Intent Filter

Sie haben gesehen, wie die Absicht zu verwenden, eine andere Tätigkeit zu nennen. Android-Betriebssystem verwendet Filter, eine Reihe von Aktivitäten, Dienstleistungen zu spezifizieren und Broadcast-Empfänger behandeln Absicht, brauchen die Hilfe des Vorsatzes Aktion Kategorie angegeben ist, dem Datenmuster. Mit <Intent-Filter> Element in der Manifest-Datei in den entsprechenden Aktion, Kategorien aufgelistet und Datentypen in Aktivitäten, Dienstleistungen und Broadcast-Empfänger.

Das folgende Beispiel zeigt einen Teil AndroidManifest.xml Datei durch die Wirkung eines aktiven cn.uprogrammer.intentfilter.CustomActivity angegeben können Kategorien und Datenanrufe festgelegt:

<activity android:name=".CustomActivity"
   android:label="@string/app_name">

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

</activity>

Wenn die Aktivität über dem Filter definiert ist, andere Aktivitäten können Sie die folgende Art und Weise verwenden, um dieses Ereignis zu berufen. Verwenden Sie android.intent.action.VIEW verwenden cn.uprogrammer.intentfilter.LAUNCH Aktion und bieten android.intent.category.DEFAULT Kategorie.

Element gibt die Aktivitäten der erwarteten Datentyp aufgerufen werden. Beispiele für die oben, die benutzerdefinierte Aktivität gewünschten Daten aus dem "http: //" am Anfang.

Dies ist der Fall, durch den Filter ist vorgesehen, um mehrere Tätigkeiten oder Dienstleistungen geliefert werden, zu dem der Benutzer aufgefordert wird Baugruppe zu starten. Wenn Sie nicht über die Zielkomponente zu finden, tritt eine Ausnahme.

Vor der Veranstaltung aufrufen, eine Reihe von Android überprüfen Test:

  • Filter <Intent-Filter> müssen zur Liste eine oder mehrere der Aktion kann nicht leer sein, das zumindest einen Filter Element, sonst wird es alle Absichten blockieren. Wenn mehrere Aktionen genannt werden, Android, bevor eine Aktion aufrufen, um zu versuchen, die Aktivitäten dort genannten entsprechen.
  • Filter <intent-filter> 0 sind, aufgeführt werden, eine oder mehrere Kategorien. Wenn keine Kategorie erwähnt wird, durch diesen Test Android, wenn es mehrere Kategorien erwähnt sind, ist es durch die Art der Test bestimmt ist, muss die Klassifizierung jedes Intent Objekt des Filters in einer Kategorie entsprechen.
  • jeder Element kann einen URI angeben und einen Datentyp (Element Medientypen). Es gibt separate Eigenschaft, da jeder Teil des URI: Schema, Host, Port und Pfad. Und Art der Absicht enthält eine URI, nur seiner Art entspricht, eine bestimmte Art von Filter aufgeführten Datentypen durch den Testabschnitt.

Beispiele

Die folgenden Beispiele sind einige Modifikationen der obigen Beispiele. Hier werden wir sehen, ob eine definierte Absicht zwei Ereignisse zu nennen, Android, wie der Konflikt zu lösen, wie Filter zu verwenden, um eine benutzerdefinierte Aktivität aufzurufen, wenn es nicht die Absicht ist es, die entsprechende Aktivitäten zu definieren, wird anormal sein.

Schritt Erklärung
1 Android Studio IDE cn.uprogrammer.intentfilter namens eine Android-Anwendung, mit dem Namen Intent-Filter, Paket zu erstellen. Wenn Sie ein Projekt erstellen, stellen Sie sicher, dass das Ziel SDK und kompilieren mit der neuesten Version des Android SDK verwenden erweiterte API.
2 Ändern src / cn.uprogrammer.intentfilter / MainActivity.java Datei, fügen Sie den Code drei Zuhörer zu drei Tasten zu definieren, um das Layout in dem Dokument definiert entspricht.
3 In src / cn.uprogrammer.intentfilter / CustomActivity.java Datei auf eine Aktivität enthalten, die eine andere Absicht Anrufe werden kann.
4 Ändern res / Layout / activity_main.xml lineare Layout-Datei drei Schaltflächen hinzufügen.
5 In res / lauout / custom_view.xml Layout-Datei, fügen Sie einfach Um die Daten von Vorsatz übertragen anzuzeigen.
6 Ändern AndroidManifest.xml Datei, fügen Sie das <Intent-Filter> Definition von Regeln bestimmt benutzerdefinierte Aktivitäten aufzurufen.
7 Starten Sie Android-Emulator die Anwendung und überprüfen Sie die Ergebnisse von Änderungen an der Anwendung auszuführen.

Im Folgenden ist der Inhalt von src / cn.uprogrammer.intentfilter / MainActivity.java von:

package cn.uprogrammer.intentfilter;

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 extends ActionBarActivity {
    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.uprogrammer.cn"));
                startActivity(i);
            }
        });

        b2=(Button)findViewById(R.id.button2);
        b2.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent i = new Intent("cn.uprogrammer.intentfilter.LAUNCH",Uri.parse("http://www.uprogrammer.cn"));
                startActivity(i);
            }
        });

        b3=(Button)findViewById(R.id.button3);
        b3.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent i = new Intent("cn.uprogrammer.intentfilter.LAUNCH",Uri.parse("https://www.uprogrammer.cn"));
                startActivity(i);
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.

        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

Hier ist, was src / cn.uprogrammer.intentfilter / CustomActivity.java von:

package cn.uprogrammer.intentfilter;

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

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());
    }
}

Hier ist der Inhalt der res / Layout / activity_main.xml von:

<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="意图实例"
        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="www.uprogrammer.cn"
        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/ic_launcher"
        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="通过View动作启动浏览器"
        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="通过Launch动作启动浏览器"
        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" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="异常情况"
        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>

Hier ist der Inhalt der 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="fill_parent"
   android:layout_height="fill_parent">

   <TextView android:id="@+id/show_data"
      android:layout_width="fill_parent"
      android:layout_height="400dp"/>

</LinearLayout>

Hier ist der Inhalt der res / Werte / strings.xml Datei:

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

Hier ist der Inhalt der Datei AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.uprogrammer.intentfilter"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="22" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Base.Theme.AppCompat" >

        <activity
            android:name="cn.uprogrammer.intentfilter.MainActivity"
            android:label="@string/app_name" >

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

        </activity>

        <activity android:name="cn.uprogrammer.intentfilter.CustomActivity"
            android:label="@string/app_name">

        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <action android:name="cn.uprogrammer.intentfilter.LAUNCH" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="http" />
        </intent-filter>

        </activity>

    </application>
</manifest>

Lassen Sie uns einfach eine modifizierte Intent-Filter-Anwendungen ausführen. Ich nehme an, Sie AVD während der Installationsumgebung erstellt haben. Öffnen Sie das Projekt in der aktiven Datei, klicken Sie in der Symbolleiste auf Bild Icon ausführen, um die Anwendung im Android Studio. Android Studio installieren Sie die Anwendung auf dem AVD und gestartet. Wenn alles gut geht, wird es auf dem Emulator-Fenster angezeigt werden, wie folgt:

Bild

Klicken Sie auf die erste Schaltfläche, "Verwenden Ansicht Aktion um den Browser zu starten." Hier definieren wir unsere eigene Aktivität enthält "android.intent.action.VIEW" und das Android-System definiert wurde auf den Standard aktiv VIEW Aktion entsprechen den Web-Browser zu starten, Android zeigt die folgenden Optionen zu wählen, was Sie starten möchten Aktivität:

Bild

Wenn Sie einen Browser wählen, Android wird einen Web-Browser und öffnen www.uprogrammer.cn Website starten. Wenn Sie IntentDemo Option wählen, Android wird CustomActivity starten, hat das Ereignis nichts zu tun, nur erfassen und die Daten in der Textview weitergegeben anzuzeigen.

Bild

Nun, durch die Zurück-Taste und klicken Sie auf "Launch Aktion durch Browser starten" klicken, wo Android Filter anwenden die definierten Aktivitäten zu wählen, und einfach die benutzerdefinierten Aktivitäten starten.

Wieder die Zurück-Taste zurück und klicken Sie auf den "außergewöhnlichen Bedingungen" Taste verwenden gehen, versuchen, einen zu finden, wo Android Absicht durch die effektiven Filter gegeben, aber keine Definition der effektiven Tätigkeit finden konnte. Weil wir https statt http-Daten verwenden, und die richtige Aktion gegeben, sobald Android erzeugen eine Ausnahme. Wie folgt:

Bild