Latest web development tutorials

Intencją Android (zamiar) i filtr (filtr)

Android intencją jest abstrakcyjny opis działań, które mają być wykonane. Może on być uruchamiany przez działalność startActivity, broadcastIntent wysłać go do transmisji wszystkich zainteresowanych elementów odbiorników radiowych, StartService (Intent) lub bindService (Intent, ServiceConnection, int) do komunikacji z usługami back-end.

Sam (zamiarem obiektu) intencją jest biernym struktura danych, która przechowuje abstrakcyjny opis operacji, które zostaną wykonane.

Na przykład, masz aktywny, otwórz klienta poczty i wysyłać wiadomości do urządzenia z systemem Android. W tym celu należy wysłać aktywność ACTION_SEND z odpowiednim przełącznikiem do Android procesor intencji. Określone selektor podano odpowiedni interfejs, aby użytkownik mógł zdecydować, jak wysłać swoje dane komunikatu.

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 składnia wywoływania powyższych metod, aby otworzyć działalność e-mail, wyniki działania kodu wygląda następująco:

obraz

Na przykład, masz aktywny, trzeba otworzyć URL na urządzeniach z systemem Android poprzez przeglądarkę. W tym celu należy wysłać zdarzeń ACTION_WEB_SEARCH zamiar procesorów Android zamiar otworzyć dany adres URL w przeglądarce. Procesor intencją analizując szereg działań, a także wybrać najbardziej odpowiedni jedną aktywność zamierzasz w tym przypadku działalność przeglądarki internetowej. Procesor zamiar przejść na swojej stronie internetowej adres do przeglądarki internetowej i otwórz działanie przeglądarki internetowej.

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

Powyższy przykład znajdzie "www.uprogrammer.cn" wyszukiwarki na Androida i daje wyniki na działalności kluczowego.

Dla każdego elementu - działalności, usług, nadawanych odbiorniki mają niezależny mechanizm przekazywania intencji.

Nie. Sposób i opis
1 Context.startActivity (): Intencją przekazany do metody stosowanej do rozpoczęcia nowej działalności lub masz już działalność, aby zrobić coś nowego.
2 Context.startService (): Intencją przekazany do metody, zainicjować usługę, lub nowe informacje do uporczywego usługi.
3 Context.sendBroadcast (): Intencją przekazany do metody, informacje zostaną dostarczone do wszystkich zainteresowanych odbiorników telewizyjnych.

Intent obiektu

Intent przedmiotem jest pakiet informacji dla komponentu odbiera intencje systemem Android otrzyma informację.

Intent Obiekt składa się z następujących elementów, w zależności od tego, czego chcą się komunikować lub wykonać.

Akcja (Action)

Ma to być część zamiarem obiektu, jest reprezentowany jako ciąg znaków. Intent broadcast, działanie w przypadku, będą zgłaszane. Akcja będzie w dużej mierze określić, jak reszta z zamiarem jest zorganizowane. Intent klasa definiuje zestaw działań stałych odpowiadających różnych intencjach. Oto intencją akcja standardowa Android listy.

Intent obiektu w ruchu można ustawić metodą setAction () metoda, dzięki getAction () do odczytu.

Dane (Data)

Dodawanie danych z intencją specyfikacji filtra. Specyfikacja może być tylko jeden typ danych (takich jak atrybut typu komórek) URI lub zawierają oba rodzaje danych i Uri. Przez URI określić atrybuty różnych części.

Atrybuty te określają format adresu URL nie jest obowiązkowe, ale także od siebie niezależne -

  • Jeśli intencją nie jest określony tryb filtrowania, wszystkie inne mienie URI jest ignorowany.
  • Jeżeli nie określono komputera dla filtru, atrybuty portowe, ścieżki i atrybuty są ignorowane.

Metoda SetData () może być określony tylko dane uri, setType () może jedynie określić rodzaj metadanych, setDataAndType () może być określony URI i typy elementów jednocześnie. URI przez getData () do odczytu, typu przez GetType () do odczytu.

Oto kilka przykładów zestawu działań / danych -

Nie. Akcja / data oraz opis
1 Zawartość ACTION_VIEW: // Kontakt / ludzie / 1: 1 jest wyświetlane dla informacji o identyfikatorze użytkownika.
2 ACTION_DIAL content: // Kontakt / ludzie / 1: Pokaż telefon Zadzwoń, a następnie wypełnić dane użytkownika 1.
3 ACTION_VIEW tel: 123: Pokaż telefon dialer i wypełnić podany numer.
4 ACTION_DIAL tel: 123: Pokaż telefon dialer i wypełnić podany numer.
5 Zawartość ACTION_EDIT: // Kontakt / ludzie / 1: edytowanie informacji identyfikacyjnych użytkownika 1.
6 Zawartość ACTION_VIEW: // Kontakt / ludzie /: wyświetla listę użytkowników do przejrzenia.
7 ACTION_SET_WALLPAPER: Wybierz ustawienie wyświetlania tapety.
8 ACTION_SYNC: synchronizowanie danych, wartość domyślną: android.intent.action.SYNC
9 ACTION_SYSTEM_TUTORIAL: Otwarta platforma poradnik rozdzielczości (czy ustawiona poradnik początek Tutorial)
10 ACTION_TIMEZONE_CHANGED: Gdy strefa czasowa jest zmieniany powiadomienia
11 ACTION_UNINSTALL_PACKAGE: uruchomienie domyślnego deinstalatora

kategoria

Kategoria jest opcjonalną częścią intencji, to ciąg znaków, który zawiera dodatkowe informacje na temat rodzajów komponentów przeznaczonych do przetworzenia intencje. Metoda addCategory () z zamiarem dodania kategorię obiektu, sposób removeCategory (), aby usunąć wcześniej dodawanie kategorii, getCategories () pobiera ustawione na zamiarem kategorii obiektów. Oto kategoria Android intencji standardowy list.

Można przeglądać następujące sekcje filtrów zamiarem zrozumieć, w jaki używamy kategorię przez odpowiedni zamiar wybrać odpowiednie działania.

Dodatkowe dane

Ta jest przekazywana do zespołu do czynienia z zamiarem kluczy dodatkowych informacji zawartych w niniejszym opisie. Zestawy według putExtras (), metoda getExtras () do odczytu. Oto intencją standardowy dodatkowe dane Android listy.

znak

Znaczniki te są opcjonalną częścią zamiarem, wskazując systemu Android, jak rozpocząć działalność, jak po rozpoczęciu leczenia.

Nie. Etykiety i opisy
1 FLAG_ACTIVITY_CLEAR_TASK: Jeżeli intencją, a przechodząc przez Context.startActivity ten tag spowoduje, że wszystkie dotychczasowe zadania związane z działalnością jest czyszczony przed rozpoczęciem imprezy. Działania będą źródłem pustej zadania, wszystkie stare aktywność jest zakończone. Zastosowanie znakiem mogą być łączone z FLAG_ACTIVITY_NEW_TASK.
2 FLAG_ACTIVITY_CLEAR_TOP: Jeśli ta opcja jest włączona, zdarzenie zostanie uruchomione w zadaniu, które jest obecnie uruchomiony. Choroba ta nie uruchamia nową instancję działalności, wszystkie działania na nim jest wyłączony, ten zamiar jako nowy intencją jest dostarczana do istniejącej (aktualnie na szczycie) działań.
3 FLAG_ACTIVITY_NEW_TASK: Ten znacznik jest powszechnie stosowany na takie działania "starter" styl zachowania: aby zapewnić użytkownikom przebiegu danych może zostać ukończone niezależnie i rozpocząć oddzielnym dzieciom kompleksowe działania.

Nazwa składnika

Komponent Nazwa obiektu jest opcjonalne pole działania, usługi lub odbiornik transmisji klasy reprezentatywne. Jeśli ustawione, intencją obiekt zostanie przekazany do realizacji instancję klasy zaprojektowany Inaczej Android inne intencje innych informacji, aby znaleźć odpowiedni cel. Nazwa składnika przez setComponent (), setClass () lub setClassName () aby skonfigurować () przejść przez getComponent.


Rodzaj intencyjny

Android obsługuje dwa rodzaje intencji.

obraz

wyraźnym zamiarem

Wewnętrzny świat wyraźnym zamiarem, aby podłączyć aplikację, jeśli trzeba połączyć działalność do innej działalności, możemy pokazać intencję, Poniższy rysunek przedstawia połączenie klikając przycisk pierwszej czynności do drugiej działalności.

obraz

Intencją kierowania składnik według nazwy, zazwyczaj wykorzystywane do stosowania wewnętrznych informacji - takich jak aktywność uzupełniającą lub działalności, aby rozpocząć rozpocząć działalność rodzeństwa. Na przykład:

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

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

intencją niejawny

Intencją tych celów nie imię i nazwisko, nazwa domeny jest składnikiem puste. Niejawne intencje są często używane do aktywacji składników innych aplikacji. Na przykład:

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

Kod powyżej będą następujące wyniki:

obraz

Komponent docelowy odbiera intencją, metody getExtras () można użyć w celu uzyskania dodatkowych danych przesyłanych przez komponent źródłowy. Na przykład:

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

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

Przykłady

Poniższy przykład demonstruje użycie zamiarem Android uruchomić różne funkcje Android wbudowanych aplikacji.

krok opis
1 Korzystanie z Androidem Studio IDE do tworzenia aplikacji na Androida o nazwie filtr Intent, pakiet o nazwie cn.uprogrammer.intentfilter. Podczas tworzenia projektu, należy upewnić się, że SDK docelowej i skompilować z najnowszej wersji Android SDK użyciu zaawansowanego API.
2 Modyfikowanie pliku src / cn.uprogrammer.intentfilter / MainActivity.java i dodać kod definiuje dwa detektory do odpowiednich dwóch przycisków "start Browser" i "Zacznij nazywają"
3 Modyfikacja res / layout / pliki układ activity_main.xml, układ Internecie dodać trzy przyciski.
4 Uruchom emulator systemu Android, aby uruchomić aplikację i sprawdzić wyniki zmian wprowadzonych do wniosku.

Poniżej znajduje się treść pliku src / cn.uprogrammer.intentfilter / MainActivity.java:

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

Oto zawartość pliku res / layout / activity_main.xml:

<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>

Oto treść RES / wartości / strings / xml, definiowanie dwóch nowych stałych.

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

Poniżej znajduje się domyślna zawartość 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>

    </application>
</manifest>

Załóżmy, wystarczy uruchomić zmodyfikowane aplikacje filtrujące intencji. Zakładam, że utworzyliśmy AVD podczas środowiska instalacji. Otwórz projekt w aktywnym pliku, kliknij przycisk na pasku narzędzi obraz Ikona, aby uruchomić aplikację w Android Studio. Android Studio zainstalować aplikację na AVD i uruchamia go. Jeśli wszystko pójdzie dobrze, to zostanie wyświetlona w oknie emulatora w następujący sposób:

obraz

Teraz kliknij na przycisk "Start Browser", który będzie uruchomić przeglądarkę, w zależności od konfiguracji i wyświetlić http://www.uprogrammer.cn w następujący sposób:

obraz

W podobny sposób, można kliknąć na przycisk "Rozpocznij połączeń", aby otworzyć interfejs telefonu, który pozwoli Ci wybrać numery telefonów zostały podane.


intent Filtry

Widzieliście, jak używać zamiar wywołać inną aktywność. System operacyjny Android wykorzystuje filtry, aby określić zakres działań, usług i odbiorniki broadcast obsłużyć intencją, potrzebujemy pomocy intencyjny podanej kategorii działań, wzór danych. Użyj <intent-filter> elementu w pliku manifestu wymienionych w odpowiednich działań, kategorii i typów danych w działaniach, usługach i odbiorników telewizyjnych.

Poniższy przykład pokazuje części pliku AndroidManifest.xml określonym działaniem aktywnego cn.uprogrammer.intentfilter.CustomActivity można ustawić kategorie i transmisję danych:

<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>

Gdy działalność jest zdefiniowana powyżej filtra, inne działania można użyć w następujący sposób do powoływania się na to wydarzenie. Użyj android.intent.action.VIEW użyj działania cn.uprogrammer.intentfilter.LAUNCH i zapewniają kategorię android.intent.category.DEFAULT.

Element określa działania, które mają być nazywany oczekiwany typ danych. Przykłady powyższe, aktywność niestandardowych pożądane dane z "http: //" na początku.

Jest to przypadek, przez filtr, to ma być dostarczony do różnych działań lub usług, do których użytkownik zostanie poproszony, aby rozpocząć montaż. Jeśli nie możesz znaleźć komponent docelowy, wystąpi wyjątek.

Przed wywołaniem zdarzenia, serię Android Sprawdź testu:

  • Filtr <zamiaru filtr> trzeba podać jedną lub więcej z działań nie może być pusty, zawierający co najmniej jeden filtr Element, inaczej będzie blokować wszystkie zamiary. Jeśli wiele działań można wymienić, Android przed wywołaniem akcji próbować dopasować działań wymienionych w niej.
  • Filtr <intent-filter> 0 mogą być wymienione, jedną lub więcej kategorii. Jeśli żadna kategoria jest wymieniany, Android za pośrednictwem tego testu, jeśli istnieje wiele kategorii wymienionych, jest on przeznaczony dla danego typu badania, klasyfikacja każdego obiektu Intent musi zgadzać się z filtra w kategorii.
  • każdy Element można określić URI i typ danych (pierwiastek typy mediów). Istnieje odrębną własność, tak jak każdej części URI: Program, host, port i ścieżkę. I rodzaj intencyjny zawiera URI, tylko jego typ pasuje pewien rodzaj filtra wymienionych typów danych poprzez odcinku testowym.

Przykłady

Poniższe przykłady są pewne modyfikacje powyższych przykładów. Tutaj będziemy sprawdzić, czy określony zamiar zadzwonić dwa wydarzenia, Android, jak rozwiązać ten konflikt, jak używać filtrów do wywołania aktywności niestandardowy, jeśli nie ma zamiaru określać odpowiednie działania będą nieprawidłowe.

krok wyjaśnienie
1 Korzystanie z Androidem Studio IDE do tworzenia aplikacji na Androida o nazwie filtr Intent, pakiet o nazwie cn.uprogrammer.intentfilter. Podczas tworzenia projektu, należy upewnić się, że SDK docelowej i skompilować z najnowszej wersji Android SDK użyciu zaawansowanego API.
2 Modyfikowanie pliku src / cn.uprogrammer.intentfilter / MainActivity.java, dodać kod do zdefiniowania trzech słuchaczy do trzech przycisków odpowiadających układzie określonym w dokumencie.
3 Dodaj plik src / cn.uprogrammer.intentfilter / CustomActivity.java obejmować działalności, które mogą być różne połączenia intencji.
4 Modyfikacja res / layout układ liniowy plik / activity_main.xml dodać trzy przyciski.
5 Dodaj / RES / lauout plik układu custom_view.xml, wystarczy dodać Aby wyświetlić dane transmitowane przez intencji.
6 Modyfikacja AndroidManifest.xml plik dodaj <intent-Filter> definicję zasad mających na celu wywołać działania niestandardowe.
7 Uruchom emulator systemu Android, aby uruchomić aplikację i sprawdzić wyniki zmian wprowadzonych do wniosku.

Poniżej znajduje się treść src / cn.uprogrammer.intentfilter / MainActivity.java z:

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

Oto co src / cn.uprogrammer.intentfilter / CustomActivity.java się z:

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

Oto treść RES / Układ / activity_main.xml z:

<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>

Oto zawartość pliku res / layout / custom_view.xml:

<?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>

Oto treść RES / wartości / pliku strings.xml:

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

Oto zawartość pliku 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>

Załóżmy, wystarczy uruchomić zmodyfikowane aplikacje filtrujące intencji. Zakładam, że utworzyliśmy AVD podczas środowiska instalacji. Otwórz projekt w aktywnym pliku, kliknij przycisk na pasku narzędzi obraz Ikona, aby uruchomić aplikację w Android Studio. Android Studio zainstalować aplikację na AVD i uruchamia go. Jeśli wszystko pójdzie dobrze, to zostanie wyświetlona w oknie emulatora w następujący sposób:

obraz

Kliknij na pierwszy przycisk "Korzystanie z funkcji podglądu działania, aby uruchomić przeglądarkę." Tutaj definiujemy nasze działanie niestandardowe zawiera "android.intent.action.VIEW", a system Android został zdefiniowany odpowiadać na działanie domyślne aktywnego widoku, aby uruchomić przeglądarkę internetową, Android wyświetla następujące opcje do wyboru, co chcesz, aby rozpocząć aktywność:

obraz

Jeśli zdecydujemy się na przeglądarkę, Android uruchomi przeglądarkę internetową i otwórz stronę internetową www.uprogrammer.cn. Jeśli wybierzesz opcję IntentDemo, Android zacznie CustomActivity, wydarzenie było nie robić nic, po prostu uchwycić i wyświetlania danych przekazywanych w TextView.

obraz

Teraz, za pomocą przycisku Back i kliknij "operacja uruchomienia przez uruchomienie przeglądarki" przycisk, gdzie Android zastosować filtry, aby wybrać określone działania, i po prostu rozpocząć działania niestandardowe.

Ponownie użyj przycisku Wstecz, aby wrócić i kliknij na przycisk "wyjątkowych warunkach", spróbuj znaleźć taki, w którym Android intencji danej przez skutecznych filtrów, ale nie mógł znaleźć definicję skutecznego działania. Ponieważ używamy https zamiast danych HTTP, a ze względu na prawidłowe działanie, po Androida generować wyjątek. W następujący sposób:

obraz