Android - Ý định và Bộ lọc
Android Intentlà một mô tả trừu tượng của một hoạt động sẽ được thực hiện. Nó có thể được sử dụng vớistartActivity để khởi chạy một Hoạt động, broadcastIntent để gửi nó đến bất kỳ thành phần BroadcastReceiver quan tâm nào và startService(Intent) hoặc là bindService(Intent, ServiceConnection, int) để giao tiếp với một Dịch vụ nền.
The intent itself, an Intent object, is a passive data structure holding an abstract description of an operation to be performed.
Ví dụ: giả sử rằng bạn có Hoạt động cần khởi chạy ứng dụng email khách và gửi email bằng thiết bị Android của bạn. Vì mục đích này, Hoạt động của bạn sẽ gửi ACTION_SEND cùng vớichooser, vào Trình phân giải ý định của Android. Trình chọn được chỉ định cung cấp giao diện thích hợp để người dùng chọn cách gửi dữ liệu email của bạn.
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 là gọi phương thức startActivity để bắt đầu một hoạt động email và kết quả sẽ như hình dưới đây:
Ví dụ: giả sử rằng bạn có Hoạt động cần mở URL trong trình duyệt web trên thiết bị Android của bạn. Vì mục đích này, Hoạt động của bạn sẽ gửi Ý định ACTION_WEB_SEARCH đến Trình phân giải ý định của Android để mở URL nhất định trong trình duyệt web. Trình phân giải ý định phân tích cú pháp qua danh sách Hoạt động và chọn hoạt động phù hợp nhất với Ý định của bạn, trong trường hợp này là Hoạt động trình duyệt web. Sau đó, Trình phân giải ý định chuyển trang web của bạn đến trình duyệt web và bắt đầu Hoạt động trình duyệt web.
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 kiếm như tutorialspoint trên công cụ tìm kiếm android và nó cung cấp kết quả điểm hướng dẫn trong hoạt động của bạn
Có các cơ chế riêng để cung cấp ý định cho từng loại thành phần - các hoạt động, dịch vụ và bộ thu phát sóng.
Sr.No | Phương pháp & Mô tả |
---|---|
1 |
Context.startActivity() Đối tượng Intent được chuyển cho phương thức này để khởi chạy một hoạt động mới hoặc nhận một hoạt động hiện có để làm điều gì đó mới. |
2 |
Context.startService() Đối tượng Intent được chuyển tới phương thức này để bắt đầu một dịch vụ hoặc cung cấp các hướng dẫn mới cho một dịch vụ đang diễn ra. |
3 |
Context.sendBroadcast() Đối tượng Intent được chuyển tới phương thức này để gửi thông điệp đến tất cả các máy thu phát sóng quan tâm. |
Đối tượng ý định
Đối tượng Intent là một gói thông tin được sử dụng bởi thành phần nhận ý định cũng như thông tin được sử dụng bởi hệ thống Android.
Đối tượng Intent có thể chứa các thành phần sau dựa trên những gì nó đang giao tiếp hoặc sẽ thực hiện:
Hoạt động
Đây là phần bắt buộc của đối tượng Intent và là một chuỗi đặt tên cho hành động sẽ được thực hiện - hoặc, trong trường hợp ý định truyền phát, hành động đã diễn ra và đang được báo cáo. Hành động phần lớn xác định cách cấu trúc phần còn lại của đối tượng ý định. Lớp Intent định nghĩa một số hằng số hành động tương ứng với các ý định khác nhau. Đây là danh sách các Hành động tiêu chuẩn cho ý định của Android
Hành động trong một đối tượng Intent có thể được thiết lập bởi phương thức setAction () và được đọc bởi getAction ().
Dữ liệu
Thêm đặc tả dữ liệu vào bộ lọc ý định. Đặc tả có thể chỉ là một kiểu dữ liệu (thuộc tính mimeType), chỉ một URI hoặc cả một kiểu dữ liệu và một URI. Một URI được chỉ định bởi các thuộc tính riêng biệt cho từng phần của nó -
Các thuộc tính chỉ định định dạng URL này là tùy chọn, nhưng cũng phụ thuộc lẫn nhau -
- Nếu một lược đồ không được chỉ định cho bộ lọc ý định, tất cả các thuộc tính URI khác sẽ bị bỏ qua.
- Nếu máy chủ lưu trữ không được chỉ định cho bộ lọc, thuộc tính cổng và tất cả các thuộc tính đường dẫn sẽ bị bỏ qua.
Phương thức setData () chỉ định dữ liệu dưới dạng URI, setType () chỉ định dữ liệu đó là kiểu MIME và setDataAndType () chỉ định dữ liệu đó là cả URI và kiểu MIME. URI được đọc bởi getData () và loại bởi getType ().
Một số ví dụ về cặp hành động / dữ liệu là:
Sr.No. | Mô tả & Cặp Hành động / Dữ liệu |
---|---|
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ị trình quay số điện thoại với người đã điền. |
3 |
ACTION_VIEW tel:123 Hiển thị trình quay số điện thoại với số đã được điền vào. |
4 |
ACTION_DIAL tel:123 Hiển thị trình quay số điện thoại 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ó số nhận dạng là "1". |
6 |
ACTION_VIEW content://contacts/people/ Hiển thị danh sách những người mà người dùng có thể duyệt qua. |
7 |
ACTION_SET_WALLPAPER Hiển thị cài đặt để chọn hình nền |
số 8 |
ACTION_SYNC Nó sẽ đồng bộ hóa dữ liệu, Giá trị Không đổi là android.intent.action.SYNC |
9 |
ACTION_SYSTEM_TUTORIAL Nó sẽ bắt đầu hướng dẫn do nền tảng xác định (Hướng dẫn mặc định hoặc hướng dẫn khởi động) |
10 |
ACTION_TIMEZONE_CHANGED Nó gần gũi khi múi giờ thay đổi |
11 |
ACTION_UNINSTALL_PACKAGE Nó được sử dụng để chạy trình gỡ cài đặt mặc định |
thể loại
Danh mục là một phần tùy chọn của đối tượng Intent và đó là một chuỗi chứa thông tin bổ sung về loại thành phần sẽ xử lý ý định. Phương thức addCategory () đặt một danh mục trong một đối tượng Intent, removeCategory () xóa một danh mục đã thêm trước đó và getCategories () nhận tập hợp tất cả các danh mục hiện có trong đối tượng. Đây là danh sách Danh mục tiêu chuẩn ý định của Android .
Bạn có thể kiểm tra chi tiết về Bộ lọc ý định trong phần bên dưới để hiểu cách chúng tôi sử dụng danh mục để chọn hoạt động phù hợp tương ứng với Ý định.
Bổ sung
Điều này sẽ nằm trong các cặp khóa-giá trị để có thêm thông tin cần được chuyển đến thành phần xử lý ý định. Các phần bổ sung có thể được đặt và đọc bằng cách sử dụng các phương thức putExtras () và getExtras () tương ứng. Đây là danh sách dữ liệu bổ sung chuẩn cho ý định của Android
Cờ
Những cờ này là một phần tùy chọn của đối tượng Intent và hướng dẫn hệ thống Android cách khởi chạy một hoạt động và cách xử lý nó sau khi nó được khởi chạy, v.v.
Sr.No | Cờ & Mô tả |
---|---|
1 |
FLAG_ACTIVITY_CLEAR_TASK Nếu được đặt trong Intent được chuyển tới Context.startActivity (), cờ này sẽ khiến mọi tác vụ hiện có được liên kết với hoạt động bị xóa trước khi hoạt động được bắt đầu. Có nghĩa là, hoạt động trở thành gốc mới của một nhiệm vụ trống và mọi hoạt động cũ đã kết thúc. Điều này chỉ có thể được sử dụng cùng với FLAG_ACTIVITY_NEW_TASK. |
2 |
FLAG_ACTIVITY_CLEAR_TOP Nếu được đặt và hoạt động đang được khởi chạy đã chạy trong tác vụ hiện tại, thì thay vì khởi chạy phiên bản mới của hoạt động đó, tất cả các hoạt động khác trên nó sẽ bị đóng và Ý định này sẽ được chuyển đến (bây giờ đầu trang) hoạt động cũ dưới dạng Ý định mới. |
3 |
FLAG_ACTIVITY_NEW_TASK Cờ này thường được sử dụng bởi các hoạt động muốn thể hiện hành vi kiểu "trình khởi chạy": chúng cung cấp cho người dùng danh sách những việc riêng biệt có thể được thực hiện, nếu không sẽ chạy hoàn toàn độc lập với hoạt động khởi chạy chúng. |
Tên thành phần
Trường tùy chọn này là một android ComponentNameđối tượng đại diện cho lớp Activity, Service hoặc BroadcastReceiver. Nếu nó được đặt, đối tượng Intent sẽ được chuyển đến một thể hiện của lớp được chỉ định, nếu không Android sử dụng thông tin khác trong đối tượng Intent để định vị mục tiêu phù hợp.
Tên thành phần được đặt bởi setComponent (), setClass () hoặc setClassName () và được đọc bởi getComponent ().
Các loại ý định
Có hai loại ý định sau được Android hỗ trợ
Ý định rõ ràng
Ý định rõ ràng sẽ được kết nối thế giới nội bộ của ứng dụng, giả sử nếu bạn muốn kết nối một hoạt động này với một hoạt động khác, chúng ta có thể thực hiện trích dẫn này theo ý định rõ ràng, hình ảnh dưới đây là kết nối hoạt động đầu tiên với hoạt động thứ hai bằng cách nhấp vào nút.
Các ý định này chỉ định thành phần đích theo tên của nó và chúng thường được sử dụng cho các thông báo nội bộ ứng dụng - chẳng hạn như một hoạt động bắt đầu một dịch vụ cấp dưới hoặc khởi chạy một hoạt động chị em. Ví dụ -
// Explicit Intent by specifying its class name
Intent i = new Intent(FirstActivity.this, SecondActivity.class);
// Starts TargetActivity
startActivity(i);
Ý định ngầm
Các ý định này không đặt tên cho mục tiêu và trường cho tên thành phần bị bỏ trống. Ý định ngầm thường được sử dụng để kích hoạt các thành phần trong các ứ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);
Đoạn mã trên sẽ cho kết quả như hình bên dưới
Thành phần mục tiêu nhận được ý định có thể sử dụng getExtras()để lấy dữ liệu bổ sung được gửi bởi thành phần nguồn. 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");
Thí dụ
Ví dụ sau cho thấy chức năng của Android Intent để khởi chạy các ứng dụng tích hợp sẵn khác nhau của Android.
Bươc | Sự miêu tả |
---|---|
1 | Bạn sẽ sử dụng Android studio IDE để tạo ứng dụng Android và đặt tên là Ứng dụng của tôi theo gói com.example.saira_000.myapplication . |
2 | Sửa đổi tệp src / main / java / MainActivity.java và thêm mã để xác định hai trình nghe tương ứng với hai nút tức là. Khởi động Trình duyệt và Khởi động Điện thoại. |
3 | Sửa đổi tệp XML bố cục res / layout / activity_main.xml để thêm ba nút trong bố cục tuyến tính. |
4 | Chạy ứng dụng để khởi chạy trình giả lập Android và xác minh kết quả của các thay đổi được thực hiện trong ứng dụng. |
Sau đây là nội dung của tệp hoạt động chính được sửa đổi 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.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
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);
}
});
}
}
Sau đây sẽ là nội dung của res/layout/activity_main.xml tập tin -
<?xml version="1.0" encoding="utf-8"?>
<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>
Sau đây sẽ là nội dung của res/values/strings.xml để xác định hai hằng số mới -
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">My Applicaiton</string>
</resources>
Sau đâ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.saira_000.myapplication">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
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" />
</intent-filter>
</activity>
</application>
</manifest>
Hãy cố gắng chạy My Applicationứng dụng. Tôi cho rằng bạn đã tạo raAVDtrong khi thiết lập môi trường. Để chạy ứng dụng từ Android Studio, hãy mở một trong các tệp hoạt động của dự án của bạn và nhấp vào
Bây giờ bấm vào Start Browser nút này sẽ khởi động trình duyệt được định cấu hình và hiển thị http://www.example.com như hình dưới đây -
Cách tương tự, bạn có thể khởi chạy giao diện điện thoại bằng nút Bắt đầu điện thoại, cho phép bạn quay số điện thoại đã cho.
Bộ lọc Ý định
Bạn đã thấy cách Intent được sử dụng để gọi một hoạt động khác. Hệ điều hành Android sử dụng bộ lọc để xác định tập hợp Hoạt động, Dịch vụ và Bộ thu phát sóng có thể xử lý Ý định với sự trợ giúp của nhóm hành động, danh mục, lược đồ dữ liệu được chỉ định được liên kết với Ý định. Bạn sẽ sử dụng<intent-filter> trong tệp kê khai để liệt kê các hành động, danh mục và kiểu dữ liệu được liên kết với bất kỳ hoạt động, dịch vụ hoặc bộ thu phát sóng nào.
Sau đây là một ví dụ về một phần của AndroidManifest.xml tệp để chỉ định một hoạt động com.example.My Application.CustomActivity có thể được gọi bằng một trong hai hành động được đề cập, một danh mục và một dữ liệu -
<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 hoạt động này được xác định cùng với các bộ lọc được đề cập ở trên, các hoạt động khác sẽ có thể gọi hoạt động này bằng cách sử dụng android.intent.action.VIEWhoặc sử dụng com.example.My Application.LAUNCH hành động miễn là danh mục của họ là android.intent.category.DEFAULT.
Các <data> phần tử chỉ định loại dữ liệu mà hoạt động mong đợi sẽ được gọi và ví dụ ở trên hoạt động tùy chỉnh của chúng tôi mong muốn dữ liệu bắt đầu bằng "http: //"
Có thể có tình huống một ý định có thể đi qua các bộ lọc của nhiều hoạt động hoặc dịch vụ, người dùng có thể được yêu cầu kích hoạt thành phần nào. Một ngoại lệ được nêu ra nếu không tìm thấy mục tiêu.
Có các bước kiểm tra Android thử nghiệm sau đây trước khi gọi một hoạt động -
Bộ lọc <intent-filter> có thể liệt kê nhiều hơn một hành động như được hiển thị ở trên nhưng danh sách này không được để trống; một bộ lọc phải chứa ít nhất một phần tử <action>, nếu không nó sẽ chặn tất cả các ý định. Nếu có nhiều hành động được đề cập thì Android sẽ cố gắng khớp một trong các hành động được đề cập trước khi gọi hoạt động đó.
Bộ lọc <intent-filter> có thể liệt kê không, một hoặc nhiều danh mục. nếu không có danh mục nào được đề cập thì Android luôn vượt qua bài kiểm tra này nhưng nếu nhiều danh mục được đề cập thì để có ý định vượt qua bài kiểm tra danh mục, mọi danh mục trong đối tượng Intent phải khớp với một danh mục trong bộ lọc.
Mỗi phần tử <data> có thể chỉ định một URI và một kiểu dữ liệu (kiểu phương tiện MIME). Có các thuộc tính riêng biệt nhưscheme, host, portvà pathcho từng phần của URI. Đối tượng Intent có chứa cả URI và kiểu dữ liệu sẽ chỉ chuyển phần kiểu dữ liệu của thử nghiệm nếu kiểu của nó khớp với kiểu được liệt kê trong bộ lọc.
Thí dụ
Ví dụ sau là một sửa đổi của ví dụ trên. Ở đây chúng ta sẽ xem cách Android giải quyết xung đột nếu một ý định đang gọi hai hoạt động được xác định trong, tiếp theo là cách gọi một hoạt động tùy chỉnh bằng cách sử dụng bộ lọc và thứ ba là một trường hợp ngoại lệ nếu Android không gửi hoạt động thích hợp được xác định cho một ý định.
Bươc | Sự miêu tả |
---|---|
1 | Bạn sẽ sử dụng android studio để tạo ứng dụng Android và đặt tên nó là Ứng dụng của tôi theo gói com.example.tutorialspoint7.myapplication; . |
2 | Sửa đổi tệp src / Main / Java / MainActivity.java và thêm mã để xác định ba trình nghe tương ứng với ba nút được xác định trong tệp bố cục. |
3 | Thêm tệp src / Main / Java / CustomActivity.java mới để có một hoạt động tùy chỉnh sẽ được gọi bởi các ý định khác nhau. |
4 | Sửa đổi tệp XML bố cục res / layout / activity_main.xml để thêm ba nút trong bố cục tuyến tính. |
5 | Thêm một tệp XML bố cục res / layout / custom_view.xml để thêm một <TextView> đơn giản để hiển thị dữ liệu được truyền thông qua ý định. |
6 | Sửa đổi AndroidManifest.xml để thêm <intent-filter> nhằm xác định các quy tắc cho ý định gọi hoạt động tùy chỉnh của bạn. |
7 | Chạy ứng dụng để khởi chạy trình giả lập Android và xác minh kết quả của các thay đổi được thực hiện trong ứng dụng. |
Sau đây là nội dung của tệp hoạt động chính được sửa đổi src/MainActivity.java.
package com.example.tutorialspoint7.myapplication;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
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.
tutorialspoint7.myapplication.
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);
}
});
}
}
Sau đây là nội dung của tệp hoạt động chính được sửa đổi src/com.example.My Application/CustomActivity.java.
package com.example.tutorialspoint7.myapplication;
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.widget.TextView;
/**
* Created by TutorialsPoint7 on 8/23/2016.
*/
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());
}
}
Sau đây sẽ là nội dung của res/layout/activity_main.xml tập tin -
<?xml version="1.0" encoding="utf-8"?>
<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.tutorialspoint7.myapplication.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_alignLeft="@+id/imageButton"
android:layout_alignStart="@+id/imageButton"
android:layout_alignEnd="@+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_alignEnd="@+id/button" />
<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_toStartOf="@+id/editText"
android:layout_alignParentEnd="true" />
</RelativeLayout>
Sau đây sẽ là nội dung của res/layout/custom_view.xml tập tin -
<?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">
<TextView android:id="@+id/show_data"
android:layout_width="fill_parent"
android:layout_height="400dp"/>
</LinearLayout>
Sau đây sẽ là nội dung của res/values/strings.xml để xác định hai hằng số mới -
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">My Application</string>
</resources>
Sau đâ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.tutorialspoint7.myapplication">
<application
android:allowBackup = "true"
android:icon = "@mipmap/ic_launcher"
android:label = "@string/app_name"
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" />
</intent-filter>
</activity>
<activity android:name="com.example.tutorialspoint7.myapplication.CustomActivity">
<intent-filter>
<action android:name = "android.intent.action.VIEW" />
<action android:name = "com.example.tutorialspoint7.myapplication.LAUNCH" />
<category android:name = "android.intent.category.DEFAULT" />
<data android:scheme = "http" />
</intent-filter>
</activity>
</application>
</manifest>
Hãy cố gắng chạy My Applicationứng dụng. Tôi cho rằng bạn đã tạo raAVDtrong khi thiết lập môi trường. Để chạy ứng dụng từ Android Studio, hãy mở một trong các tệp hoạt động của dự án của bạn và nhấp vào
Bây giờ chúng ta hãy bắt đầu với nút đầu tiên "Bắt đầu trình duyệt với hành động XEM". Ở đây chúng tôi đã xác định hoạt động tùy chỉnh của mình bằng bộ lọc "android.intent.action.VIEW" và đã có một hoạt động mặc định chống lại hành động XEM được xác định bởi Android đang khởi chạy trình duyệt web, Vì vậy, android hiển thị hai tùy chọn sau để chọn hoạt động bạn muốn khởi chạy.
Bây giờ nếu bạn chọn Trình duyệt, thì Android sẽ khởi chạy trình duyệt web và mở trang web example.com nhưng nếu bạn chọn tùy chọn IndentDemo thì Android sẽ khởi chạy CustomActivity mà không làm gì khác ngoài việc thu thập dữ liệu đã chuyển và hiển thị ở dạng xem văn bản như sau:
Bây giờ quay lại bằng cách sử dụng nút quay lại và nhấp vào nút "Khởi động trình duyệt với hành động KHỞI ĐỘNG", ở đây Android áp dụng bộ lọc để chọn xác định hoạt động và nó chỉ khởi chạy hoạt động tùy chỉnh của bạn
Một lần nữa, quay lại bằng cách sử dụng nút quay lại và nhấp vào nút "Điều kiện ngoại lệ", ở đây Android cố gắng tìm ra bộ lọc hợp lệ cho mục đích đã cho nhưng nó không tìm thấy hoạt động hợp lệ được xác định vì lần này chúng tôi đã sử dụng dữ liệu như https thay vì http mặc dù chúng tôi đang đưa ra một hành động chính xác, vì vậy Android đưa ra một ngoại lệ và hiển thị màn hình sau -