Gọi Activity giữa hai ứng dụng khác nhau

Một phần của tài liệu Một số vấn đề về lập trình giao diện trong Android (Trang 61)

4.3.1. Vấn đề

Ứng dụng A muốn gọi thực hiện một thao tác nào đó của ứng dụng B, nghĩa

là muốn gọi một Activity của ứng dụng B vào thời điểm Runtime. Ví dụ như từ ứng dụng Contact gọi chức năng gởi tin nhắn của ứng dụng SMS.

4.3.2. Giải pháp

Trong tập tin cấu hình AndroidManifesh.XML của ứng dụng SMS, khai báo

activity Create_Message để các ứng dụng khác có thể gọi thực hiện activity này.

<activity android:name=".Create_message"> <intent-filter> <action android:name="android.intent.action.Create_Message"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>

Dĩ nhiên Activity Create_message phải được khái báo trong ứng dụng để

các Activity trong cùng ứng dụng có thể gọi nó. Ngoài ra, để các ứng dụng khác có thể truy cập vào nó, ta phải khai báo thêm tag <intent-filter> trong tag <activity>, tag này gồm hai tag con <action> và <category>.

Trong cấu hình trên, tag <action> là quan trọng nhất, phải khái báo thuộc tính android:name của tag này có giá trị duy nhất trong hệ thống Android.. Với khai báo như trên, thì ứng dụng sẽ đăng ký với hệ thống Android một Action có tên là : android.intent.action.Create_Message, để bất cứ ứng dụng nào cũng có thể

gọi thực hiện Activity Create_Message.

Trong các ứng dụng khác, để thực hiện activity Create_Message, ta thực hiện

như sau :

// khởi tạo một Intent với tên Activity đã đăng ký trong hệ thống

Intent i = new Intent("android.intent.action.Create_Message");

// gọi thực hiện activity này với phương thức startSubAntivity()

startSubActivity(I, 0);

4.3.3. Chi tiết giải pháp

 Cấu hình trong tập tin AndroidManifesh.XML của ứng dụng SMS

<activity android:name=".Create_message"> <intent-filter> <action android:name="android.intent.action.Create_Message"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>

 Khởi tao Intent và gọi thực hiện Activity Create_Message

// khởi tao intent để gọi thực hiện activity

Intent i = new Intent("android.intent.action.Create_Message");

//khởi tạo đối tượng Bundle để truyển đối số cho activity Create_Message

Bundle wr = new Bundle();

wr.putString(“phoneNumber”,”0913141322”); // số điện thoại cần gởi tin nhắn

i.putExtras(wr);

//gọi thực hiện Activity

4.4. Kỹ thuật xử lý cuộc gọi 4.4.1. Vấn đề

Trong ứng dụng Contact, cho phép gọi nhanh một số điện thoại có trong Contact.

4.4.2. Giải pháp

Thao tác thực hiện một cuộc gọi được xây dựng sẵn trong hệ thống Android.

Hình 4.2: Màn hình gọi điện thoại

Chúng ta chỉ cần gọi thực hiện Activity này từ trong ứng dụng Contact. Như

vậy, quay lại vấn đế gọi thực hiện activity giữa hai ứng dụng khác nhau. Ở đấy, đặt biệt, activity dùng để gọi điện thoại được đăng ký sẵn trong Android với ACTION là : android.intent.action.CALL và khi gọi thực hiện activity này thì phải cho biết nó thực hiện với Contact Item nào trong Contact. Ngoài ra, cần phải đăng ký ứng dụng được phép gọi điện thoại với hệ thống trong file cấu hình AndroidManifesh.XML

4.4.3. Chi tiết giải pháp

Để thực hiện một cuộc gọi, lần lược thức hiện các bước sau :

 Đăng ký ứng dụng được gọi điện thoại với hệ thống Android trong file

AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="khtn.gpcontact"> <uses-permission android:name="android.permission.CALL_PHONE" /> <application android:icon="@drawable/icon"> ... </application> </manifest>

 Xác định ID của số điện thoại cần gọi , ví dụ ID=5

 Khởi tạo Intent với Action là Intent.CALL_ACTION và dữ liệu là chuỗi URI: content://contacts/phones/5

 Gọi thực hiện Intent với phương thức startSubActivity của lớp Activity.

Uri data = Uri.parse(Phones.CONTENT_URI.toString() + "/" +5) Intent is = new Intent(Intent.CALL_ACTION,data);

startSubActivity(is, 0);

 Ngoài ra còn có thể thực hiện cuộc gọi dựa vào ID của Contact Item, khi đó,

mặc nhiên sẽ gọi thực hiện cuộc gọi tương ứng với số điện thoại chính của

Contact Item đó. Ví dụ, gọi điện thoại với Contact Item có ID =5

Uri data = Uri.parse(People.CONTENT_URI.toString() + "/" +5) Intent is = new Intent(Intent.CALL_ACTION,data);

startSubActivity(is, 0);

Một phần của tài liệu Một số vấn đề về lập trình giao diện trong Android (Trang 61)