CĂN BẢN
INTENTS
GIAO DIỆN
CÁC KHÁI NIỆM
VÍ DỤ
TÀI LIỆU
HỌC LẬP TRÌNH ANDROID
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Intent Filters trong Android

Trong bài này chúng ta sẽ tìm hiểu về Intent Filter trong Android. Công dụng của Intent Filter dùng để lọc và xác định loại Intent mà các component sẽ sử dụng.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Intent Filter là thành phần giúp cho hệ thống Android biết được ứng dụng của bạn có thể làm được những gì. Activity, Service và BroadCast Receiver sử dụng Intent Filter để thông báo cho hệ thống biết các dạng Implicit Intent mà nó có thể xử lý. Nói cách khác, Intent Filter là bộ lọc Intent, chỉ cho những Intent phù hợp đi qua nó.

1. Giới thiệu về Intent Filter

Trong Android, Intent Filter là một biểu thức (expression) trong file manifest của ứng dụng ( ActivityMainfest.xml ) và nó được sử dụng để xác định loại Intent mà component muốn nhận. Trong trường hợp chúng ta tạo Intent Filter cho một activity, các ứng dụng khác sẽ có thể khởi chạy activity bằng cách gửi loại intent phù hợp, nếu không thì activity chỉ có thể được bắt đầu bằng một explicit intent.

Thẻ Intent Filters (<intent-filter>) trong file manifest nằm trong thẻ các component tương ứng. Ta có thể xác định loại intent phù hợp thông qua ba yếu tố dưới đây:

<action>

Bài viết này được đăng tại [free tuts .net]

Nó mô tả tên của một intent action phù hợp và nó phải là chuỗi ký tự, không phải là hằng số.

Một Filter <intent-filter> có thể liệt kê nhiều hơn một action nhưng phải chứa ít nhất 1 action, nếu không nó sẽ áp dụng cho tât cả các Intent. Nếu nhiều hơn 1 Action được tìm thấy thì hê thống Android sẽ thử chọn cái nào phù hợp trước khi khởi động Activity.

<category>

Nó mô tả tên của một loại intent được chấp nhận và nó phải là chuỗi ký tự, không phải là hằng số.

Một Filter <intent-filter> có thể liệt kê một hoặc nhiều category, hoặc có thể không có category nào. Nếu không có category nào thì hệ thống Android bỏ qua phần này. Nếu có nhiều category, từng category trong đối tượng Intent phải trùng với một trong các category của Filter.

<data>

Nó xác định loại dữ liệu sẽ phù hơp và bằng cách sử dụng một hoặc nhiều thuộc tính, chúng ta có thể chỉ định loại dữ liệu của URI (scheme, host, port, path) và loại MIME.
Một đối tượng Intent chứa cả URI và kiểu dữ liệu vượt qua Filter khi và chỉ khi kiểu dữ liệu trùng với một trong các kiểu dữ liệu của Filter.

2. Khai báo Intent Filter trong File Manifest

Sau đây là đoạn code dùng Intent Filter (<intent-filter>) trong một activity trong file Manifest ( AndroidManifest.xml ):

<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <data android:mimeType="text/plain"/>
    </intent-filter>
</activity>

Chúng ta có thể xác định một filter có nhiều phần tử <action> , <category> hoặc <data> và chúng ta cần đảm bảo rằng component có thể xử lý tất cả.

3. Khai báo nhiều Intent Filter trong File Manifest

Trong trường hợp muốn xử lý nhiều intent kết hợp nhiều action, category và data, chúng ta cần tạo nhiều intent filter.

Sau đây là đoạn code khai báo nhiều intent filter trong file Manifest để xử lý nhiều intent.

<activity android:name=".MainActivity">
    <!-- This activity is the main entry, should appear in app launcher -->
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <data android:mimeType="text/plain"/>
    </intent-filter>
</activity>
<activity android:name=".ResultActivity">
    <!-- This activity handles "SEND" actions with text data -->
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="text/plain"/>
    </intent-filter>
</activity>

Theo như đoạn code trên, activity MainActivity sẽ đóng vai trò là đầu vào cho ứng dụng vì ta đã xác định một activity sử dụng thuộc tính action MAIN và category LAUNCHER trong các intent filter (<intent-filter>).

  • MAIN - khởi chạy activity được xác định bởi action MAIN khi người dùng khởi chạy ứng dụng bằng biểu tượng launcher.
  • LAUNCHER - Nó cho biết biểu tượng activity này được đặt trong danh sách ứng dụng trên màn hình chính. Trong trường hợp <activity> không chỉ định biểu tượng thì hệ thống sẽ sử dụng biểu tượng từ phần tử <application>.

Hai phần tử ( MAIN, LAUNCHER ) này phải được dùng cùng nhau để activity xuất hiện trong trình khởi chạy ứng dụng.

Activity thứ hai ResultActivity dùng để chia sẻ văn bản. Người dùng có thể chuyển tới activity này bằng cách điều hướng từ MainActivity và họ cũng có thể chuyển tới trực tiếp từ một ứng dụng khác bằng Implicit Intent phù hợp với một trong hai bộ lọc filter của activity .

4. Ví dụ về Intent Filters trong Android

Sau đây chúng ta sẽ đi đến ví dụ đầy đủ về việc sử dụng Intent Filters. Ở đây chúng ta sẽ cấu hình và gửi email bằng Intent Filters trong ứng dụng Android.

Tạo một ứng dụng Android mới và mở file activity_main.xml từ đường dẫn \ src \ main \ res \ layout .

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:id="@+id/sendMail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="150dp"
        android:layout_marginTop="230dp"
        android:text="Send Mail" />
</LinearLayout>

Tiếp theo, mở file MainActivity.java từ đường dẫn \ src \ main \ java \ com.tutlane.intents và viết code như dưới đây

MainActivity.java

package com.tutlane.intentfilters;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btnSend = (Button)findViewById(R.id.sendMail);
        btnSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent si = new Intent(Intent.ACTION_SEND);
                si.setType("message/rfc822");
                si.putExtra(Intent.EXTRA_EMAIL, new String[]{"support@tutlane.com"});
                si.putExtra(Intent.EXTRA_SUBJECT, "Welcome to Tutlane");
                si.putExtra(Intent.EXTRA_TEXT, "Hi Guest, Welcome to Tutlane Tutorial Site");
                startActivity(Intent.createChooser(si,"Choose Mail App"));
            }
        });
    }
}

Như code ở trên, chúng ta đã sử dụng nhiều component để gửi email, đó là :

  • si - implicit intent
  • ACTION_SEND - activity action xác định rằng chúng ta đang gửi một số dữ liệu.
  • setType - sử dụng thuộc tính này để đặt loại dữ liệu MIME mà chúng ta muốn gửi. Ở đây chúng ta sử dụng “ message/rfc822 ” và các loại MIME khác là “ text/plain ” và “ image/jpg
  • putExtra - sử dụng phương thức này để thêm thông tin bổ sung vào Intent . Ở đây chúng ta thêm những điều sau đây.
    • EXTRA_EMAIL - Mảng các địa chỉ email
    • EXTRA_SUBJECT - Subject của email muốn gửi
    • EXTRA_TEXT - Phần thân email

Bây giờ mở file manifest trong Android ( AndroidManifest.xml ) và viết code như dưới đây

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.tutlane.intentfilters">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                <action android:name="android.intent.action.SEND"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:mimeType="message/rfc822"/>
            </intent-filter>
        </activity>
    </application>
</manifest>

Theo như trên, chúng ta đã thêm các trường bổ sung của Intent filter.

  • action - sử dụng thuộc tính này để xác định rằng activity có thể thực hiện hành động SEND.
  • category - bao gồm category DEFAULT cho activity này để có thể nhận được implicit intents.
  • data - loại dữ liệu mà activity có thể gửi.

5. Kết quả của ví dụ về Intent Filter trong Android

Khi chạy chương trình trên trong android studio, ta sẽ nhận được kết quả như hiển thị bên dưới.

android intent filters examples result gif

Theo minh họa trên khi chúng ta nhấp vào nút Send Mail, nó sẽ hiển thị một dialog với các ứng dụng có thể gửi email.

Đây là cách sử dụng các intent filter trong các ứng dụng Android để làm cho các component ứng dụng có thể được gọi bởi các ứng dụng khác.

Cùng chuyên mục:

Tìm hiểu về vòng đời của Activity trong Android

Tìm hiểu về vòng đời của Activity trong Android

AlarmManager trong Android

AlarmManager trong Android

Menu trong Android

Menu trong Android

Fragments trong Android

Fragments trong Android

SearchView trong Android

SearchView trong Android

TabLayout trong Android

TabLayout trong Android

ViewStub trong Android

ViewStub trong Android

Image Slider trong Android

Image Slider trong Android

Trình chuyển đổi hình ảnh (Image Switcher) trong Android

Trình chuyển đổi hình ảnh (Image Switcher) trong Android

ScrollView trong Android

ScrollView trong Android

ProgressBar trong Android

ProgressBar trong Android

Đồng hồ Analog và đồng hồ kỹ thuật số trong Android

Đồng hồ Analog và đồng hồ kỹ thuật số trong Android

Cách dùng TimePicker trong Android

Cách dùng TimePicker trong Android

Cách dùng DatePicker trong Android

Cách dùng DatePicker trong Android

Cách dùng SeekBar trong Android

Cách dùng SeekBar trong Android

Cách dùng WebView trong Android

Cách dùng WebView trong Android

Cách dùng RatingBar trong Android

Cách dùng RatingBar trong Android

Cách dùng ListView trong Android

Cách dùng ListView trong Android

AutoCompleteTextView trong Android

AutoCompleteTextView trong Android

Spinner trong Android

Spinner trong Android

Top