Bài 4: Intent và truyền nhận dữ liệu giữa các Activity... Khái niệm về Intent - Intent là một cấu trúc dữ liệu dạng tin nhắn làm cầu nối giữa các Activity, Service, Broadcast trong một
Trang 1Bài 4: Intent và truyền nhận dữ liệu giữa các Activity
Trang 2Nội dung bài học
1 Intent
2 Intent - filter
3 Truyền nhận dữ liệu giữa các Activity
Trang 31.1 Khái niệm về Intent
- Intent là một cấu trúc dữ liệu dạng tin nhắn làm cầu nối giữa các Activity, Service,
Broadcast trong một ứng dụng hoặc giữa các ứng dụng.
Trang 41.2 Các thuộc tính của một đối tượng Intent
Action
- Tên (String) của action mà Intent sẽ yêu cầu thực hiện.
- Có thể là action được Android định nghĩa sẵn, có thể là do người lập trình định nghĩa.
Category – Thông tin về nhóm của action
Type – định dạng kiểu dữ liệu (Chuẩn MIME)
Thường được tự động xác định.
Data
- Dữ liệu mà Activity được gọi sẽ xử lý.
- Định dạng là Uri (thông qua hàm Uri.parse(data)
Component- Chỉ định cụ thể lớp sẽ được thực thi
Activity
Extras – Chứa tất cả các cặp (key – value) do ứng
dụng thêm vào để truyền dữ liệu qua Intent
Trang 51.3 Phân loại Intent
Intent tường minh:
- Intent tường minh là intent dùng thuộc tính phụ để chỉ đích danh tên lớp sẽ thực thi Activity
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
Intent không tường mình:
- Intent không tường minh là intent không chỉ định một lớp cụ thể mà thay vào đó dùng các dữ liệu khác (action, data, type ) và để hệ thống tự quyết định xem lớp nào (app nào) sẽ thích hợp để đáp ứng intent đó
- Thông tin action và category của activity trong một app đáp ứng intent đó phải được khai báo trong
Manifest của app (AndroidManifest.xml) dưới dạng Intent-filter (tất nhiên nếu chúng ta muốn gọi một
built-in action thì ta không cần quan tâm đến vấn đề này)
Trang 6Ví dụ:
Intent intent = new Intent (Intent.ACTION_VIEW,
Uri.parse("https://www.google.com.vn"));
startActivity(intent);
- Trong trường hợp này chúng ta muốn mở trang web Google chúng ta cần khai báo thêm quyền truy cập internet trong file Manifest như sau:
<uses-permission android:name="android.permission.INTERNET"/>
Trang 7 Các action định nghĩa sẵn
Trang 8 Ví dụ:
- Quay một số điện thoại
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:098746422"));
startActivity(intent);
- Hiển thị danh bạ điện thoại
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse("content://contacts/people/"));
startActivity(intent);
- Chuỗi data trong hàm Uri.parse(data) là định dạng dữ liệu ContentProvider.
Trang 9 Các Action tương ứng được định nghĩa sẵn
Trang 10Intent - filter
2.1 Khái niệm
- IntentFilter 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ì.
- Tất cả các Activity, Service và BroadCast Receiver đều sử dụng IntentFilter để thông báo cho hệ thống biết các dạng Intent không tường minh mà nó có thể xử lý Nói cách khác, IntentFilter là bộ lọc chỉ cho những Intent mà nó hiểu được phép đi qua nó Intent Filter mô tả khả năng của component định nghĩa nó.
Trang 11Intent - filter
Ví dụ:
1. Tạo giao diện layout demo_intentent_filter.xml có một TextView
2. Tạo 1 activity thứ 2 trong src là DemoIntenFilter
public class DemoIntenFilter extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.demo_intentent_filter);
}
}
3 Trong file Manifest khai báo như sau:
<activity
android:name=".DemoIntenFilter"
android:label="Demo intent filter" >
<intent-filter>
<action android:name="android.intent.action.CALL_PRIVILEGED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel" />
</intent-filter>
</activity>
4 Ra màn hình home thực hiện cuộc gọi sẽ thấy hiển thị ứng dụng của chúng ta
Trang 12Truyền nhận dữ liệu giữa các Activity
3.1 Truyền dữ liệu
Cú pháp:
intent.putExtra(name, value);
intent: Là một đối tượng intent.
name: Là tên của dữ liệu.
value: Là giá trị mà các bạn muốn truyền sang Activity khác.
Trang 13Truyền nhận dữ liệu giữa các Activity
Ví dụ:
Intent intent = new Intent();
intent.putExtra("KEY_AGE", 19);
Trang 14Truyền nhận dữ liệu giữa các Activity
3.2 Nhận dữ liệu
Cú pháp:
getIntent().getExtras().get(key);
key: Chính là name khi truyền dữ liệu.
Trang 15Truyền nhận dữ liệu giữa các Activity
Ví dụ:
int age = getIntent().getExtras().get(("KEY_AGE");
Chú ý:
- Có thể khởi động một activity với một yêu cầu nào đó và activity kia khi làm xong công việc
sẽ trả lại kết quả cho activity trước.
- Ví dụ activity A yêu cầu một activity làm giúp việc chụp ảnh, activity B đáp ứng được việc này, sau khi user chụp ảnh xong sẽ trả lại file ảnh cho activity A
Trang 16Q&A