Latest web development tutorials

maksud android (Intent) dan filter (Filter)

niat Android adalah deskripsi abstrak dari tindakan yang akan dijalankan. Hal ini dapat dimulai dengan kegiatan startActivity, broadcastIntent untuk mengirim broadcast ke setiap komponen penerima radio tertarik, startService (Intent) atau bindService (Intent, ServiceConnection, int) untuk berkomunikasi dengan layanan back-end.

Niat itu sendiri (suatu objek Intent) adalah struktur data pasif yang memegang deskripsi abstrak dari operasi yang akan dilakukan.

Misalnya, Anda memiliki aktif, membuka mail client dan mengirim surat ke perangkat Android Anda. Untuk tujuan ini, Anda perlu mengirim aktivitas ACTION_SEND dengan pemilih yang cocok untuk prosesor niat Android. pemilih yang ditentukan diberikan antarmuka yang sesuai untuk membiarkan pengguna memutuskan bagaimana mengirim data pesannya.

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

sintaks startActivity untuk memanggil metode di atas untuk membuka aktivitas e-mail, hasil dari menjalankan kode terlihat seperti ini:

gambar

Misalnya, Anda memiliki aktif, Anda perlu membuka URL pada perangkat Android melalui browser. Untuk tujuan ini, kirim acara ACTION_WEB_SEARCH niat Anda untuk prosesor Android niat untuk membuka URL yang diberikan di browser Anda. Prosesor niat dengan menganalisis serangkaian kegiatan, dan untuk memilih satu kegiatan yang paling sesuai dengan keinginan Anda, dalam hal ini, aktivitas Web browser. Processor maksud untuk menyampaikan alamat halaman web Anda untuk browser Web, dan membuka kegiatan browser Web.

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

Contoh di atas akan menemukan "www.uprogrammer.cn" mesin pencari di Android, dan memberikan hasil pada aktivitas kunci.

Untuk setiap komponen - kegiatan, layanan, penerima siaran harus mekanisme independen untuk menyampaikan maksud.

Tidak. Metode dan Deskripsi
1 Context.startActivity (): niat lulus dengan metode yang digunakan untuk memulai kegiatan baru atau memiliki aktivitas yang ada untuk melakukan sesuatu yang baru.
2 Context.startService (): niat dilewatkan ke metode, menginisialisasi layanan, atau informasi baru ke layanan persisten.
3 Context.sendBroadcast (): niat dilewatkan ke metode, informasi akan dikirimkan ke semua penerima siaran tertarik.

objek Intent

objek maksud adalah paket informasi untuk komponen menerima niat sebagai sistem Android menerima informasi.

objek maksud meliputi komponen-komponen berikut, tergantung pada apa yang Anda ingin berkomunikasi atau melakukan.

Aksi (Action)

Hal ini menjadi bagian dari maksud dari objek, itu diwakili sebagai string. siaran niat, tindakan dalam acara tersebut, akan dilaporkan. Aksi akan sangat menentukan bagaimana sisa niat diatur. kelas niat mendefinisikan serangkaian tindakan konstanta sesuai dengan niat yang berbeda. Berikut adalah niat standar tindakan Android daftar.

objek niat bergerak dapat diatur dengan metode setAction (), metode dengan getAction () untuk membaca.

Data (Data)

Menambahkan data ke tujuan spesifikasi filter. Spesifikasi ini dapat hanya satu jenis data (seperti atribut jenis sel), URI, atau mencakup kedua jenis data dan URI. Oleh URI untuk menentukan atribut bagian yang berbeda.

Atribut ini menentukan format dari URL adalah opsional, tetapi juga independen satu sama lain -

  • Jika tujuannya tidak ditentukan modus filter, semua properti URI lainnya diabaikan.
  • Jika Anda tidak menentukan tuan rumah untuk filter, atribut pelabuhan, dan atribut path diabaikan.

Metode setData () hanya dapat ditentukan Data URI, setType () hanya dapat menentukan jenis data meta, setDataAndType () dapat ditentukan URI dan elemen jenis secara bersamaan. URI oleh getData () untuk membaca, jenis oleh getType () untuk membaca.

Berikut adalah beberapa contoh dari set tindakan / Data -

Tidak. Action / data dan deskripsi
1 konten ACTION_VIEW: // kontak / orang / 1: 1 ditampilkan untuk ID pengguna informasi.
2 konten ACTION_DIAL: // kontak / orang / 1: dialer Tampilkan telepon, dan mengisi data pengguna 1.
3 ACTION_VIEW tel: 123: Tampilkan telepon dialer, dan mengisi nomor yang diberikan.
4 ACTION_DIAL tel: 123: Tampilkan telepon dialer, dan mengisi nomor yang diberikan.
5 konten ACTION_EDIT: // kontak / orang / 1: Edit ID informasi pengguna 1.
6 konten ACTION_VIEW: // kontak / orang /: menampilkan daftar pengguna untuk melihat.
7 ACTION_SET_WALLPAPER: Pilih pengaturan tampilan wallpaper.
8 ACTION_SYNC: menyinkronkan data, nilai default: android.intent.action.SYNC
9 ACTION_SYSTEM_TUTORIAL: Platform terbuka definisi tutorial (atau awal default tutorial Tutorial)
10 ACTION_TIMEZONE_CHANGED: Ketika zona waktu berubah pemberitahuan
11 ACTION_UNINSTALL_PACKAGE: Anda menjalankan uninstaller bawaan

kategori

Kategori adalah bagian opsional dari maksud, adalah string yang berisi informasi tambahan tentang jenis komponen menjadi niat diproses. addCategory () metode dengan tujuan menambah kategori objek, metode removeCategory () untuk menghapus sebelum kategori menambahkan, GetCategories () Mendapatkan siap untuk kategori objek maksud. Berikut adalah standar niat kategori Android daftar.

Anda dapat melihat bagian berikut filter maksud untuk memahami bagaimana kita menggunakan kategori dengan niat yang sesuai untuk memilih kegiatan yang sesuai.

data tambahan

Ini akan diteruskan ke majelis untuk menangani dengan maksud untuk informasi tambahan kunci yang dijelaskan di sini. Set oleh putExtras (), metode getExtras () untuk membaca. Berikut adalah standar Android maksud data tambahan daftar.

tanda

Tag ini merupakan bagian opsional dari niat, menunjukkan sistem Android bagaimana memulai aktivitas, bagaimana setelah memulai pengobatan.

Tidak. Tag dan deskripsi
1 FLAG_ACTIVITY_CLEAR_TASK: Jika tujuannya, dan melewati Context.startActivity, tag ini akan menyebabkan semua tugas yang ada terkait dengan aktivitas dibersihkan sebelum acara dimulai. Kegiatan akan menjadi akar dari tugas kosong, semua aktivitas lama dihentikan. Penggunaan tanda dapat dikombinasikan dengan FLAG_ACTIVITY_NEW_TASK.
2 FLAG_ACTIVITY_CLEAR_TOP: Jika bendera ini diatur, acara tersebut akan dimulai pada tugas yang sedang berjalan. Penyakit ini tidak memulai contoh aktivitas baru, semua aktivitas di dimatikan, niat ini sebagai niat baru dikirim ke kegiatan yang ada (saat ini di atas).
3 FLAG_ACTIVITY_NEW_TASK: tag ini umumnya digunakan untuk kegiatan seperti "starter" gaya perilaku: untuk menyediakan pengguna dengan menjalankan data dapat diselesaikan secara independen, dan mulai anak-anak yang terpisah kegiatan lengkap.

Nama komponen

Komponen nama Object adalah bidang opsional perwakilan kegiatan, layanan atau penerima siaran kelas. Jika diatur, objek Intent dilewatkan untuk menerapkan sebuah instance dari kelas yang dirancang Jika tidak, Android niat lain informasi lainnya untuk mencari target yang sesuai. Nama komponen dengan setComponent (), setClass () atau setClassName () untuk mengatur, () melewati getComponent.


Jenis niat

Android mendukung dua jenis niat.

gambar

maksud eksplisit

Dunia batin dari niat eksplisit untuk menghubungkan aplikasi, jika Anda perlu untuk menghubungkan suatu kegiatan untuk kegiatan lain, kita dapat menunjukkan niat, gambar berikut menunjukkan hubungan dengan mengklik kegiatan pertama tombol untuk kegiatan kedua.

gambar

Maksud dari penargetan komponen dengan nama, umumnya digunakan untuk aplikasi informasi internal - seperti aktivitas anak perusahaan atau kegiatan untuk memulai memulai kegiatan saudara. Sebagai contoh:

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

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

maksud implisit

Maksud dari tujuan ini tidak nama, nama komponen domain kosong. maksud implisit yang sering digunakan untuk mengaktifkan komponen aplikasi lainnya. Sebagai contoh:

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

Kode di atas akan diberikan hasil berikut:

gambar

Komponen Target menerima niat, Anda dapat menggunakan metode getExtras () untuk mendapatkan data tambahan yang dikirimkan oleh komponen sumber. Sebagai contoh:

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

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

contoh

Contoh berikut menunjukkan penggunaan niat Android untuk meluncurkan berbagai fitur Android aplikasi built-in.

langkah deskripsi
1 Menggunakan Android Studio IDE untuk membuat aplikasi Android, bernama Intent filter, paket bernama cn.uprogrammer.intentfilter. Ketika Anda membuat sebuah proyek, memastikan bahwa SDK target dan mengkompilasi dengan versi terbaru dari SDK Android menggunakan API canggih.
2 Memodifikasi src file / cn.uprogrammer.intentfilter / MainActivity.java dan menambahkan kode mendefinisikan dua pendengar dengan dua tombol yang sesuai "Start Browser" dan "Mulai Call"
3 Modifikasi res / layout / activity_main.xml file layout, tata letak secara online tambahkan tiga tombol.
4 Luncurkan emulator Android untuk menjalankan aplikasi dan memverifikasi hasil perubahan yang dibuat untuk aplikasi.

Berikut ini adalah isi dari file 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);
    }
}

Berikut adalah isi dari res / layout / berkas 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>

Berikut adalah isi dari res / values ​​/ string / xml, mendefinisikan dua konstanta baru.

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

Berikut ini adalah standar konten 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>

Mari kita jalankan dimodifikasi aplikasi penyaring Intent. Saya berasumsi bahwa Anda telah membuat AVD selama lingkungan instalasi. Buka proyek Anda dalam file yang aktif, klik pada toolbar gambar Icon untuk menjalankan aplikasi Dalam Android Studio. Android Studio menginstal aplikasi pada AVD dan mulai itu. Jika semua berjalan dengan baik, itu akan ditampilkan pada jendela emulator sebagai berikut:

gambar

Sekarang klik pada "Mulai Browser" tombol, yang akan meluncurkan browser, tergantung pada konfigurasi dan menampilkan http://www.uprogrammer.cn sebagai berikut:

gambar

Dengan cara yang sama, Anda dapat mengklik tombol "Start Call" untuk membuka antarmuka telepon, yang akan memungkinkan Anda untuk menghubungi nomor telepon yang telah diberikan.


Filter niat

Anda telah melihat bagaimana menggunakan niat untuk memanggil kegiatan lain. Sistem operasi Android menggunakan filter untuk menentukan berbagai kegiatan, layanan, dan penerima siaran menangani niat, butuh bantuan maksud tertentu kategori tindakan, pola data. Gunakan <intent-filter> elemen dalam file manifest yang tercantum dalam tindakan, kategori, dan tipe data yang sesuai dalam kegiatan, layanan, dan penerima siaran.

Contoh berikut menunjukkan bagian dari file AndroidManifest.xml ditentukan oleh aksi dari cn.uprogrammer.intentfilter.CustomActivity aktif dapat mengatur kategori dan panggilan data:

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

Ketika aktivitas didefinisikan di atas filter, kegiatan lain yang dapat Anda gunakan cara berikut untuk memanggil acara ini. Gunakan android.intent.action.VIEW, menggunakan tindakan cn.uprogrammer.intentfilter.LAUNCH dan memberikan kategori android.intent.category.DEFAULT.

Elemen menentukan kegiatan yang akan disebut tipe data yang diharapkan. Contoh di atas, aktivitas kustom yang diinginkan data dari "http: //" di awal.

Ini adalah kasus, melalui filter, hal ini dimaksudkan untuk dikirim ke beberapa kegiatan atau jasa yang pengguna akan diminta untuk memulai perakitan. Jika Anda tidak menemukan komponen sasaran, pengecualian terjadi.

Sebelum memanggil acara, serangkaian Android Periksa uji:

  • Filter <intent-filter> perlu daftar satu atau lebih dari tindakan, tidak bisa kosong; terdiri dari setidaknya satu filter Elemen, selain itu akan memblokir semua maksud. Jika beberapa tindakan yang disebutkan, Android sebelum memanggil suatu tindakan untuk mencoba untuk mencocokkan kegiatan yang disebutkan di dalamnya.
  • Filter <intent-filter> 0 mungkin tercantum, satu atau lebih kategori. Jika tidak ada kategori yang disebutkan, Android melalui tes ini, jika ada beberapa kategori yang disebutkan, hal ini dimaksudkan oleh jenis tes, klasifikasi setiap objek Intent harus sesuai filter dalam kategori.
  • masing-masing Elemen dapat menentukan URI dan tipe data (elemen jenis media). Ada harta yang terpisah, karena setiap bagian dari URI: skema, host, port, dan jalan. Dan jenis niat termasuk URI, hanya jenisnya cocok dengan jenis tertentu filter tercantum tipe data melalui bagian tes.

contoh

Contoh berikut adalah beberapa modifikasi dari contoh di atas. Di sini kita akan melihat apakah niat didefinisikan untuk memanggil dua peristiwa, Android cara mengatasi konflik; bagaimana menggunakan filter untuk memohon kegiatan adat, jika tidak ada niat untuk menentukan kegiatan yang tepat akan normal.

langkah penjelasan
1 Menggunakan Android Studio IDE untuk membuat aplikasi Android, bernama Intent filter, paket bernama cn.uprogrammer.intentfilter. Ketika Anda membuat sebuah proyek, memastikan bahwa SDK target dan mengkompilasi dengan versi terbaru dari SDK Android menggunakan API canggih.
2 Memodifikasi file src / cn.uprogrammer.intentfilter / MainActivity.java, menambahkan kode untuk menentukan tiga pendengar untuk tiga tombol yang sesuai dengan tata letak yang ditetapkan dalam dokumen.
3 Menambahkan file src / cn.uprogrammer.intentfilter / CustomActivity.java untuk menyertakan aktivitas yang dapat menjadi panggilan niat yang berbeda.
4 Modifikasi res / layout / activity_main.xml linear file layout menambahkan tiga tombol.
5 Tambahkan res / lauout / custom_view.xml file layout, cukup tambahkan Untuk menampilkan data yang dikirimkan oleh niat.
6 Memodifikasi file AndroidManifest.xml, tambahkan <intent-filter> definisi aturan dimaksudkan untuk memohon kegiatan adat.
7 Luncurkan emulator Android untuk menjalankan aplikasi dan memverifikasi hasil perubahan yang dibuat untuk aplikasi.

Berikut ini adalah isi dari src / cn.uprogrammer.intentfilter / MainActivity.java dari:

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

Inilah yang src / cn.uprogrammer.intentfilter / CustomActivity.java dari:

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

Berikut adalah isi dari res / layout / activity_main.xml dari:

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

Berikut adalah isi dari res / layout / berkas 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>

Berikut adalah isi dari res / values ​​/ berkas strings.xml:

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

Berikut adalah isi dari file 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>

Mari kita jalankan dimodifikasi aplikasi penyaring Intent. Saya berasumsi bahwa Anda telah membuat AVD selama lingkungan instalasi. Buka proyek Anda dalam file yang aktif, klik pada toolbar gambar Icon untuk menjalankan aplikasi Dalam Android Studio. Android Studio menginstal aplikasi pada AVD dan mulai itu. Jika semua berjalan dengan baik, itu akan ditampilkan pada jendela emulator sebagai berikut:

gambar

Klik pada tombol pertama, "Menggunakan View tindakan untuk memulai browser." Di sini kita mendefinisikan aktivitas kebiasaan kami berisi "android.intent.action.VIEW", dan sistem Android telah didefinisikan sesuai dengan tindakan standar aktif VIEW untuk memulai browser Web, Android menampilkan pilihan berikut untuk memilih apa yang ingin Anda mulai kegiatan:

gambar

Jika Anda memilih browser, Android akan meluncurkan browser Web dan situs www.uprogrammer.cn terbuka. Jika Anda memilih opsi IntentDemo, Android akan mulai CustomActivity, acara tidak melakukan apa-apa, hanya menangkap dan menampilkan data lewat di TextView.

gambar

Sekarang, melalui tombol Back dan klik "tindakan Launch dengan memulai Browser" tombol, di mana Android menerapkan filter untuk memilih kegiatan yang ditetapkan, dan hanya memulai kegiatan adat.

Sekali lagi menggunakan tombol kembali untuk kembali dan klik pada tombol "kondisi luar biasa", mencoba untuk menemukan satu di mana Android maksud diberikan oleh filter yang efektif, tapi tidak bisa menemukan definisi aktivitas yang efektif. Karena kita menggunakan https bukan data http, dan diberi tindakan yang benar, sekali Android menghasilkan pengecualian. Sebagai berikut:

gambar