Friday, March 12, 2021

Tìm hiểu Intent Filters Android

Trong những tài liệu về lập trình Android, thì intent Filters là một biểu thức trong file manifest của ứng dụng và nó được sử dụng để chỉ định loại định nghĩa mà thành phần muốn nhận. Trong trường hợp nếu chúng ta muốn tạo Intent Filters cho một loại hoạt động nào đó của ứng dụng, chúng ôi bằng cách gửi một trong những điều kiện nào đó mà bên nhận sẽ nhận biết được.

<action>

Nó xác định tên của một hành động dự định sẽ được chấp nhận và nó phải là một giá trị chuỗi theo nghĩa đen của một hành động, không phải là hằng số lớp.

<category>

Nó xác định tên của một thể loại ý định được chấp nhận và nó phải là giá trị chuỗi theo nghĩa đen của một hành động, không phải là hằng số của lớp.

<data>

Nó xác định kiểu dữ liệu được chấp nhận 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 các khía cạnh khác nhau của URI dữ liệu (lược đồ, máy chủ, cổng, đường dẫn) và kiểu MIME.

Khai báo Intent Filters trong manifest

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

Ở trường hợp bạn muốn khởi tạo nhiều intent filter trong manifest

Trong trường hợp nếu chúng ta muốn xử lý nhiều Intents với sự kết hợp của hành động, thể loại, và dữ liệu, chúng ta cần phải tạo nhiều intent filter.

Sau đây là đoạn mã xác định nhiều bộ lọc Ý định trong tệp kê khai android để xử lý nhiều Ý định .

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>

Tôi sẽ giới thiệu sơ qua một chút về những thành phần của inter filter

Main : Nó cho biết điểm nhập chính của ứng dụng có nghĩa là nó bắt đầu hoạt động được xác định bằng  hành động CHÍNH khi người dùng khởi chạy ứng dụng lần đầu bằng biểu tượng trình khởi chạy. 

LAUNCHER : Nó chỉ ra rằng biểu tượng hoạt động này nên được đặt trên danh sách ứng dụng trên màn hình chính. Trong trường hợp nếu phần tử <activity> không chỉ định biểu tượng có biểu tượng, thì hệ thống sẽ sử dụng biểu tượng từ phần tử <ứng dụng> .

Ví dụ về intent filter trong android

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>

MainActivity.java

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

            }

        });

    }

}

ACTION_SEND - Đây là một hành động hoạt động chỉ định rằng chúng tôi đang gửi một số dữ liệu.

setType  - Chúng tôi sử dụng thuộc tính này để đặt kiểu MIME dữ liệu mà chúng tôi muốn gửi. Ở đây chúng tôi đã sử dụng “ message / rfc822 ” và các loại MIME khác là “ text / trơn ” và “ image / jpg ”

putExtra - chúng tôi sử dụng phương thức putExtra () này để thêm thông tin bổ sung vào Intent của chúng tôi. Ở đây chúng tôi thêm những điều sau đây.

EXTRA_EMAIL - Đó là một loạt các địa chỉ email

EXTRA_SUBJECT - Chủ đề của email mà chúng tôi muốn gửi

EXTRA_TEXT - Nội dung email 

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>

No comments:

Post a Comment