Intent trong Android




Một Intent trong Android là một miêu tả trừu tượng của một hoạt động để được thực hiện. Nó có thể được sử dụng với startActivity để chạy một Activity, broadcastIntent để gửi nó tới bất kỳ thành phần BroadcastReceiver nào quan tâm đến, và với startService(Intent)hoặc bindService(Intent, ServiceConnection, int) để giao tiếp với một Service ở Background.

Intent chính nó, một đối tượng Intent, là một cấu trúc dữ liệu thụ động giữ một miêu tả trừu tượng của một hành động để được thực hiện.

Ví dụ, giả sử rằng bạn có một Activity cần chạy một Email client và gửi một Email sử dụng thiết bị Android. Cho mục đích này, Activity của bạn sẽ gửi một ACTION_SEND cùng với Chooser thích hợp, tới Android Intent Resolver. Chooser đã cho cung cấp giao diện thích hợp cho người dùng để lựa chọn cách gửi dữ liệu Email của họ.

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

Cú pháp trên đang gọi phương thức startActivity để bắt đầu một Email activity và kết quả như sau:

Intent trong Android

Ví dụ, giả sử bạn có một Activity mà cần mở URL trong một trình duyệt web trên thiết bị Android. Với mục đích này, Activity của bạn sẽ gửi ACTION_WEB_SEARCH Intent tới Android Intent Resolver để mở URL đã cho trong trình duyệt web. Intent Resolver này phân tích cú pháp qua một danh sách các Activity và lựa chọn một cái tốt nhất cho Intent của bạn, trong trường hợp này là Web Browser Activity. Sau đó, Intent Resolver truyền trang web tới trình duyệt và bắt đầu Web Browser Activity.

String q = "tutorialspoint";
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH );
intent.putExtra(SearchManager.QUERY, q);
startActivity(intent);

Ví dụ trên sẽ tìm tutorialspoint trên thiết bị tìm kiếm của Android và nó sẽ cho kết quả của tutorialspoint trong một Activity của bạn.

Có một số kỹ thuật riêng rẽ để phân phối các Intent tới mỗi loại thành phần như Activity, Service và BroadcastReceiver.

Stt Phương thức & Miêu tả
1 Context.startActivity()

Đối tượng Intent được truyền tới phương thức này để chạy một Activity mới hoặc lấy một Activity đang tồn tại để làm cái gì đó mới

2 Context.startService()

Đối tượng Intent được truyền tới phương thức này để khởi tạo một Service hoặc phân phối các chỉ thị mới tới một Service đang chạy

3 Context.sendBroadcast()

Đối tượng Intent được truyền tới phương thức này để phân phối thông báo tới tất cả BroadcastReceiver cần quan tâm

Các đối tượng Intent trong Android

Một đối tượng Intent là một gói thông tin mà được sử dụng bởi thành phần mà nhận được Intent đó cũng như thông tin được sử dụng bởi hệ điều hành Android.

Một đối tượng Intent có thể chứa các thành phần sau dựa vào những gì nó giao tiếp hoặc đang chuẩn bị thực hiện: −

Action

Đây là phần bắt buộc của đối tượng Intent và là một chuỗi đặt tên action để được thực hiện, hoặc trong trường hợp các Broadcast Intent, thì đó là action mà đã diễn ra và đang được báo cáo. Action quyết định cách mà phần còn lại của đối tượng Intent được cấu trúc. Lớp Intent định nghĩa một số hằng action tương ứng với các Intent khác nhau. Bạn theo link sau để có danh sách các Standard Action trong Android.

Action trong một đối tượng có thể được thiết lập bởi phương thức setAction() và được đọc bởi getAction().

Data

Là dữ liệu được sử dụng trong một Action. Nó thêm một kiểu dữ liệu (thuộc tính mimeType), một URI, hoặc cả kiểu dữ liệu và URI tới một Intent Filter. Một URI được xác định bởi các thuộc tính riêng rẽ cho mỗi phần của nó. −

Các thuộc tính này, xác định định dạng của URL, là tùy ý, nhưng chúng cũng có thể phụ thuộc vào: −

  • Một một Scheme không được xác định cho Intent Filter, thì tất cả thuộc tính URI khác bị bỏ qua.
  • Nếu một Host không được xác định cho Intent Filter, thì thuộc tính port và tất cả thuộc tính path bị bỏ qua.

Phương thức setData() xác định dữ liệu chỉ ở dạng như một URI, phương thức setType() xác định nó chỉ ở dạng một kiểu MIME, và setDataType() xác định nó với cả hai dạng là URI và một kiểu MIME. URI được đọc bởi getData() và kiểu được đọc bởi getType().

Bảng dưới liệt kê một số ví dụ về các cặp action/data: −

Stt Cặp Action/Data & Miêu tả
1 ACTION_VIEW content://contacts/people/1

Hiển thị thông tin về người có định danh là "1"

2 ACTION_DIAL content://contacts/people/1

Hiển thị phone dialer với người đã được điền vào trong

3 ACTION_VIEW tel:123

Hiển thị phone dialer với số đã được điền vào

4 ACTION_DIAL tel:123

Hiển thị phone dialer với số đã được điền vào

5 ACTION_EDIT content://contacts/people/1

Chỉnh sửa thông tin về người có định danh là "1"

6 ACTION_VIEW content://contacts/people/

Hiển thị danh sách people mà người dùng có thể duyệt qua đó

7 ACTION_SET_WALLPAPER

Hiển thị thiết lập để lựa chọn wallpaper

8 ACTION_SYNC

Đồng bộ hóa dữ liệu, Constant Value là android.intent.action.SYNC

9 ACTION_SYSTEM_TUTORIAL

Bắt đầu phần hướng dẫn mặc định (đã được định nghĩa trước)

10 ACTION_TIMEZONE_CHANGED

Nó thông báo khi Timezone đã thay đổi

11 ACTION_UNINSTALL_PACKAGE

Được sử dụng để chạy Uninstaller

Category trong Android

Category là một phần tùy ý của đối tượng Intent và nó là một chuỗi chứa thông tin bổ sung về loại thành phần mà nên xử lý Intent đó. Phương thức addCategory() đặt một Category trong một đối tượng Intent, phương thức removeCategory() xóa một Category đã được thêm trước đó, và phương thức getCategories() lấy tập hợp các Category hiện tại trong đối tượng. Bạn theo link sau để có một danh sách Standard Category trong Android.

Bạn có thể kiểm tra chi tiết về Intent Filter ở phần dưới để hiểu cách chúng ta sử dụng Category để lựa chọn Activity thích hợp với một Intent.

Extras

Nó sẽ là trong một cặp key-value cho thông tin bổ sung mà sẽ được phân phối tới thành phần xử lý Intent đó. Extras có thể được thiết lập và được đọc bởi sử dụng tương ứng hai phương thức là putExtras() và getExtras(). Bạn theo link sau để có danh sách Standard Extra trong Android.

Flags

Các Flags này là phần tùy ý của đối tượng Intent và chỉ thị hệ điều hành Android cách chạy một Activity, và cách xử lý sau khi nó đã chạy, …

Stt Flag & Miêu tả
1 FLAG_ACTIVITY_CLEAR_TASK

Nếu thiết lập trong một Intent được truyền tới Context.startActivity(), thì flag này sẽ làm cho bất cứ tác vụ nào đang tồn tại, mà được gắn kết với Activity, bị xóa trước khi Activity đó được bắt đầu. Đó là, Activity đó trở thành Root mới của một tác vụ trống, và bất kỳ Activity cũ nào bị kết thúc. Điều này chỉ có thể được sử dụng khi kết hợp với FLAG_ACTIVITY_NEW_TASK

2 FLAG_ACTIVITY_CLEAR_TOP

Nếu được thiết lập, và Activity đang được chạy là đã chạy trong tác vụ hiện tại, thì thay vì chạy sự thể hiện mới của Activity đó, tất cả Activity khác ở trên nó sẽ bị đóng và Intent này sẽ được phân phối tới Activity cũ (ngay trên) như là một Intent mới

3 FLAG_ACTIVITY_NEW_TASK

Nói chung, Flag này được sử dụng bởi các Activity mà muốn có mặt một hành vi "launcher": chúng cung cấp cho người dùng một danh sách các mục riêng rẽ để có thể được thực hiện, mà có thể chạy hoàn toàn độc lập với Activity đang chạy chúng

Component Name trong Android

Trường tùy ý này là một đối tượng ComponentName trong Android để biểu diễn lớp Activity, Service, hoặc lớp BroadcastReceiver. Nếu nó được thiết lập, đối tượng Intent được phân phối tới một sự thể hiện của lớp đã chỉ định, nếu không thì Android sử dụng thông tin khác trong đối tượng Intent để xác định vị trí một mục tiêu phù hợp.

Component Name được thiết lập bởi setComponent(), setClass() hoặc setClassName() và được đọc bởi getComponent().

Các loại Intent trong Android

Android hỗ trợ hai loại Intent:

Intent trong Android

Các đối tượng Explicit Intent trong Android

Explicit Intent đang được kết nối với thế giới nội tại của ứng dụng, giả sử nếu bạn muốn kết nối một Activity tới Activity khác, chúng ta có thể thực hiện điều này bởi Explicit Intent. Hình ảnh sau đang kết nối Activity đầu tiên với Activity thứ hai bằng việc nhấn vào nút.

Intent trong Android

Các Intent này chỉ rõ thành phần target bằng tên của nó và chúng đặc biệt được sử dụng cho các thông báo nội bộ ứng dụng, như việc một Activity bắt đầu một Service của nó. Ví dụ: −

// Explicit Intent by specifying its class name
Intent i = new Intent(FirstActivity.this, SecondAcitivity.class);

// Starts TargetActivity
startActivity(i);

Các đối tượng Implicit Intent trong Android

Có thể gọi là Intent ngầm định. Chúng không đặt tên mục tiêu và trường cho tên thành phần là để trống. Các Implicit Intent thường được sử dụng để hoạt hóa các thành phần trong ứng dụng khác. Ví dụ: −

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

Code trên sẽ cho kết quả:

Intent trong Android

Thành phần target mà nhận Intent này có thể sử dụng phương thức getExtras() để lấy dữ liệu Extras được gửi bởi thành phần source. Ví dụ: −

// Get bundle object at appropriate place in your code
Bundle extras = getIntent().getExtras();

// Extract data using passed keys
String value1 = extras.getString("Key1");
String value2 = extras.getString("Key2");

Ví dụ

Ví dụ sau minh họa tính năng của một Intent trong Android để chạy các ứng dụng có sẵn trong Android.

Bước Miêu tả
1 Bạn sử dụng Android Studio IDE để tạo một ứng dụng Android có tên là My Application dưới một package com.example.saira_000.myapplication.Trong khi tạo project này, đảm bảo Target SDKCompile With là tại phiên bản mới nhất của Android SDK để sử dụng các APIs cấp độ cao hơn
2 Sửa đổi src/main/java/MainActivity.java và thêm code để định nghĩa hai Listener tương ứng với hai nút là Start Browser và Start Phone
3 Sửa đổi res/layout/activity_main.xml để thêm 3 nút trong linear layout
4 Chạy ứng dụng để chạy Android Emulator và kiểm tra kết quả các thay đổi đã thực hiện trong ứng dụng

Sau đây là nội dung đã chỉnh sửa của src/com.example.My Application/MainActivity.java.

package com.example.saira_000.myapplication;

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.example.com"));
            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) {
      // 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);
   }
}

Nội dung của res/layout/activity_main.xml file sẽ là: −

<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="Intent Example"
      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="Tutorials point"
      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/abc"
      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="Start Browser"
      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="Start Phone"
      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>

Để định nghĩa hai hằng mới, nội dung của res/values/strings.xml là: −

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

Nội dung mặc định của AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.My Application"
   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/AppTheme" >
      
      <activity
         android:name="com.example.saira_000.myapplication.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>

Chạy ứng dụng Android. Giả sử bạn đã tạo AVD trong khi cài đặt. Để chạy ứng dụng từ Android Studio, mở activity file và nhấn biểu tượng Run từ thanh công cụ. −

Intent trong Android

Bây giờ, nhất nút Start Browser, sẽ bắt đầu một trình duyệt được cấu hình và hiển thị http://example.com như sau: −

Intent trong Android

Tương tự, bạn có thể chạy Phone Interface bởi sử dụng nút Start Phone, cho phép bạn quay với số điện thoại đã cung cấp.

Intent Filter trong Android

Bạn đã thấy cách một Intent được sử dụng để gọi một Activity khác. Hệ điều hành Android sử dụng các Filter để định vị tập hợp các Activity, Service và BroadcastReceiver mà có thể xử lý Intent với sự giúp đỡ của một tập đã cho của các Action, Category, Data Sheme mà gắn kết với một Intent. Bạn sẽ sử dụng phần tử <> trong manifest file để liệt kê các Action, Category, Data Sheme mà gắn kết với bất cứ Activity, Service, hoặc BroadcastReceiver nào.

Sau đây là một ví dụ của một phần AndroidManifest.xml để xác định một Activity là com.example.My Application.CustomActivity mà có thể được triệu hồi bởi một trong hai Action ở trên, một Category, và một Data. −

<activity android:name=".CustomActivity"
   android:label="@string/app_name">
   
   <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <action android:name="com.example.My Application.LAUNCH" />
      <category android:name="android.intent.category.DEFAULT" />
      <data android:scheme="http" />
   </intent-filter>
   
</activity>

Khi Activity này được định nghĩa cùng với Filter ở trên, thì các Activity khác sẽ có thể triệu hồi Activity này bởi sử dụng android.intent.action.VIEW, hoặc sử dụng com.example.MyApplication.LAUNCH action đã cung cấp category của nó là android.intent.category.DEFAULT.

Phần tử <data> xác định kiểu dữ liệu được mong đợi bởi Activity để được gọi và với ví dụ trên, thì Custom Activity của chúng ta mong muốn dữ liệu bắt đầu với "http://"

Có một tình huống mà một Intent có thể truyền thông qua các Filter của nhiều hơn một Activity hoặc Service, người dùng có thể được hỏi xem thành phần nào để hoạt hóa. Một Exception sẽ được tạo ra nêu không tìm thấy mục tiêu nào.

Android sẽ kiểm tra một số test sau trước khi triệu hồi một Activity: −

  • Một <intent-filter> <> có thể liệt kê nhiều hơn một Action như ở trên nhưng list này không thể là trống; một Filter phải chứa ít nhất một phần tử <action> nếu không thì nó sẽ chặn tất cả Intent. Nếu có nhiều hơn một Action được đề cập, thì Android cố gắng kết nối một trong những Action đó trước khi triệu hồi Activity.

  • Một <intent-filter>có thể liệt kê 0, 1, hoặc nhiều hơn một Category. Nếu không có Category nào được đề cập, thì Android luôn luôn truyền test này nhừng nếu có nhiều hơn một Category được đề cập thì cho một Intent để truyền Category test, mỗi Category trong đối tượng Intent phải kết nối một Category trong Filter.

  • mỗi phần tử <data> có thể xác định một URI và một kiểu dữ liệu (kiểu MIME). Có các thuộc tính riêng biệt như scheme, host, port và path cho mỗi phần của URI. Một đối tượng Intent mà chứa cả URI và kiểu dữ liệu thì truyền phần kiểu dữ liệu của test chỉ khi kiểu của nó kết nối với một kiểu được liệt kê trong Filter.

Ví dụ

Ví dụ sau sửa đổi ví dụ trên. Ở đây, chúng ta sẽ thấy cách Android xử lý xung đột nếu một Intent đang triệu hồi hai Activity được định nghĩa trong nó, kế tiếp là cách để triệu hồi một Custom Activity bởi sử dụng một Filter và tiếp nữa là một Exception nếu Android không tìm thấy Activity thích hợp mà đã định nghĩa cho một Intent.

Bước Miêu tả
1 Bạn sử dụng Android Studio để tạo một ứng dụng Android có tên là My Application dưới một package com.example.saira_000.myapplication.Trong khi tạo project này, đảm bảo Target SDKCompile With là phiên bản mới nhất của Android SDK để sử dụng APIs cấp độ cao hơn
2 Sửa đổi src/Main/Java/MainActivity.java file và thêm code để định nghĩa ba Listener tương ứng với ba button được định nghĩa trong layout file
3 Thêm một src/Main/Java/CustomActivity.java mới để có một Custom Activity mà sẽ được triệu hồi bởi các Intent khác nhau
4 Sửa đổi res/layout/activity_main.xml để thêm ba button trong linear layout
5 Thêm một layout file là res/layout/custom_view.xml để thêm một <TextView> đơn giản để hiển thị dữ liệu đã truyền thông qua Intent
6 Sửa đổi AndroidManifest.xml để thê <intent-filter> để định nghĩa các qui tắc cho Intent của bạn để triệu hồi Custom Activity
7 Chạy ứng dụng để chạy Android Emulator và kiểm tra kết quả các thay đổi đã thực hiện trong ứng dụng

Nội dung của src/MainActivity.java.

package com.example.saira_000.myapplication;

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.example.com"));
            startActivity(i);
         }
      });
      
      b2=(Button)findViewById(R.id.button2);
      b2.setOnClickListener(new View.OnClickListener() {
      
         @Override
         public void onClick(View v) {
            Intent i = new Intent("com.example.My Application.LAUNCH",Uri.parse("http://www.example.com"));
            startActivity(i);
         }
      });
      
      b3=(Button)findViewById(R.id.button3);
      b3.setOnClickListener(new View.OnClickListener() {
      
         @Override
         public void onClick(View v) {
            Intent i = new Intent("com.example.My Application.LAUNCH",Uri.parse("https://www.example.com"));
            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);
   }
}

Nội dung của src/com.example.My Application/CustomActivity.java.

package com.example.saira_000.myapplication;

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

Nội dung của res/layout/activity_main.xml file −

<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="Intent Example"
      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="Tutorials point"
      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/abc"
      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="Start browsing with view action"
      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="Start browsing with launch action"
      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="Exceptional condition"
      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>

Nội dung của res/layout/custom_view.xml file −

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

Tiếp theo là nội dung của res/values/strings.xml để định nghĩa hai hằng −

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

Và đây là nội dung mặc định của AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.My Application"
   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/AppTheme" >
      
      <activity
         android:name="com.example.saira_000.myapplication"
         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="com.example.saira_000.myapplication.CustomActivity" 
         <android:label="@string/app_name">
      
         <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <action android:name="com.example.saira_000.myapplication.LAUNCH" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="http" />
         </intent-filter>
      
      </activity>
      
   </application>
</manifest>

Chạy ứng dụng Android. Giả sử bạn đã tạo AVD trong khi cài đặt. Để chạy ứng dụng từ Android Studio, mở activity file và nhấn biểu tượng Run từ thanh công cụ. −

Intent trong Android

Bây giờ, bắt đầu với button đầu tiên "Start Browser with VIEW Action". Ở đây, chúng ta đã định nghĩa Custom Activity với một Filter là "android.intent.action.VIEW", và đã có một Activity mặc định với VIEW action được định nghĩa bởi Android mà đang chạy trình duyệt web. Vì thế, Android hiển thị hai tùy chọn sau để lựa chọn Activity bạn muốn chạy.

Intent trong Android

Bây giờ, nếu bạn chọn Browser, thì Android sẽ chạy trình duyệt web và mở example.com, nhưng nếu bạn lựa chọn IndentDemo thì Android sẽ chạy CustomActivity mà không thực hiện bất cứ điều gì, chỉ bắt dữ liệu đã truyền và hiển thị trong dạng Text View, như sau: −

Intent trong Android

Bây giờ, trở lại bởi sử dụng nút back và nhấn nút "Start Browser with LAUNCH Action", ở đây Android áp dụng Filter để lựa chọn Activity và nó chạy Custom Activity của bạn.

Một lần nữa, nhấn nút back và nhấn nút "Exception Condition", ở đây Android cố gắng tìm một Filter hợp lệ cho Intent đã cho nhưng nó không tìm một Activity hợp lệ đã được định nghĩa bởi vì lúc này chúng ta đã sử dụng dữ liệu dạng https thay vì http. Vì thế, dù cho chúng ta đang cung cấp một Action đúng, thì Android tạo một Exception và hiển thị màn hình sau: −

Intent trong Android

Follow fanpage của team https://www.facebook.com/vietjackteam/ hoặc facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.