CĂN BẢN
INTENTS
GIAO DIỆN
CÁC KHÁI NIỆM
VÍ DỤ
TÀI LIỆU
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

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.

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

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.

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>

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:

FrameLayout trong Android

FrameLayout trong Android

Trong các UI Layout, FrameLayout là loại Layout đơn giản nhất, xem ngay tại đây

TableLayout trong Android

TableLayout trong Android

Trong bài này chúng ta sẽ tìm hiểu TalbeLayout trong Android

Relative Layout trong Android

Relative Layout trong Android

Trong bài này chúng ta sẽ tìm hiểu RelativeLayout trong Android

LinearLayout trong Android

LinearLayout trong Android

Ở bài trước chúng ta đã tìm hiểu sơ qua về các loại layout trong…

UI Layout trong Android

UI Layout trong Android

Trong bài này chúng ta sẽ tìm hiểu về UI Layout trong Android

View và ViewGroup trong Android

View và ViewGroup trong Android

Các thành phần cơ bản để xây dựng giao diện người dùng (UI) trong Android…

Explicit Intents trong Android

Explicit Intents trong Android

Trong bài này chúng ta sẽ tìm hiểu một loại Intent mới trong Android đó…

Implicit Intents trong Android

Implicit Intents trong Android

Trong bài này chúng ta sẽ tìm hiểu Implicit Intent trong Android

Cấu trúc thư mục Project Android

Cấu trúc thư mục Project Android

Trong bài này chúng ta sẽ tìm hiểu cấu trúc thư mục của một project…

Giới thiệu Intent trong Android

Giới thiệu Intent trong Android

Trong Android, Intent là những tin nhắn không đồng bộ cho phép các component

Fragment trong Android

Fragment trong Android

Trong bài này chúng ta sẽ tìm hiểu một khái niệm mới trong lập trình…

Services trong Android

Services trong Android

Trong bài này chúng ta sẽ tìm hiểu Services trong Android.

Broadcast Receiver trong Android

Broadcast Receiver trong Android

Bài này sẽ tìm hiểu Broadcast Receiver trong Android.

Content Providers trong Android

Content Providers trong Android

Bài này chúng ta sẽ tìm hiểu về content provider trong Android, nó đóng vai…

Activity trong Android

Activity trong Android

Trong Android, Activity biểu thị một màn hình đơn với giao diện người dùng (UI)…

Component trong một ứng dụng Android

Component trong một ứng dụng Android

Tạo trình giả lập Android hoặc Tạo AVD (Thiết bị ảo Android)

Tạo trình giả lập Android hoặc Tạo AVD (Thiết bị ảo Android)

Thiết bị ảo Android (AVD) là một trình giả lập được sử dụng để sao…

Chương trình

Chương trình "Hello World" Android

Bằng cách sử dụng IDE Android Studio (Integrated Development Environment tạm dịch :Môi trường phát…

Cấu trúc hệ điều hành Android

Cấu trúc hệ điều hành Android

Trong bài này chúng ta sẽ tìm hiểu một chút về cấu trúc của hệ…

Cài đặt Android Studio từng bước có hình ảnh minh họa

Cài đặt Android Studio từng bước có hình ảnh minh họa

Trong bài này mình sẽ hướng dẫn các bạn cách download và cài đặt Android…

Top