Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 18 trang
THÔNG TIN TÀI LIỆU
AndroidIntentFilters 19 Notes are based on: Android Developers http://developer.android.com/index.html 2 22 19. Android – IntentFiltersIntentFilters 2 So sánh: Requesting Actions Using HTTP and Android 1.Giao thức HTTP1 dùng các cặp <Action, resource> để thực hiện các nhiệm vụ. 2.Một số action HTTP là các thao tác ít nhiều quen thuộc: POST, GET, PUT, DELETE, CONNECT, HEAD, OPTIONS. 3.Android dùng một cơ chế tương tự HTTP để kích hoạt các nhiệm vụ. 4.INTENT là tên của trừu tượng hóa mà Android dùng để yêu cầu các action. 5.Khác với HTTP, một INTENT của Android có thể được giải quyết bằng vài cách (ví dụ, ta có thể có vài ứng dụng SMS muốn xử lý một tin nhắn đến). ____ 6. Source: Hypertext Transfer Protocol -- HTTP/1.1 (1999). http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html Source: http://developer.android.com/reference/android/content/Intent.html 3 33 19. Android – IntentFiltersIntentFilters 3 INTENTS • An intent is an abstract description of an operation to be performed. • Its most significant use is in the launching of activities. • The primary pieces of information in an intent are: action & data. Source: http://developer.android.com/reference/android/content/Intent.html ACTION DATA Misc The general action to be performed, such as: ACTION_EDIT, ACTION_VIEW, ACTION_MAIN, ACTION_LAUNCHER etc. The data to operate on, such as a person record in the contacts database, expressed as a URI. I am good for editing a document I am good for viewing a document I am the first exec. Activ. of Application Put me on the phone’s Menu_Pad 4 44 19. Android – IntentFiltersIntentFilters 4 Parts of a Typical Intent ACTION DATA MISC Standard URI Category CATEGORY_DEFAULT CATEGORY_BROWSABLE CATEGORY_TAB CATEGORY_ALTERNATIVE CATEGORY_SELECTED_ALTERNATIVE CATEGORY_LAUNCHER CATEGORY_INFO CATEGORY_HOME CATEGORY_PREFERENCE CATEGORY_TEST ACTION_MAIN ACTION_VIEW ACTION_ATTACH_DATA ACTION_EDIT ACTION_PICK ACTION_CHOOSER ACTION_GET_CONTENT ACTION_DIAL ACTION_CALL ACTION_SEND ACTION_SENDTO ACTION_ANSWER ACTION_INSERT ACTION_DELETE ACTION_RUN ACTION_SYNC ACTION_PICK_ACTIVITY ACTION_SEARCH ACTION_WEB_SEARCH ACTION_FACTORY_TEST ACTION_TIME_TICK ACTION_TIME_CHANGED ACTION_TIMEZONE_CHANGED ACTION_BOOT_COMPLETED ACTION_PACKAGE_ADDED ACTION_PACKAGE_CHANGED ACTION_PACKAGE_REMOVED ACTION_PACKAGE_RESTARTED ACTION_PACKAGE_DATA_CLEARED ACTION_UID_REMOVED ACTION_BATTERY_CHANGED ACTION_POWER_CONNECTED ACTION_POWER_DISCONNECTED ACTION_SHUTDOWN CONTENTS such as: content://contacts/ content://contacts/1 SCHEME such as: tel:123 http://aaa.bbb.ccc mailto://aa@bbb.ccc ftp://aaa.bbb.ccc . . . pop:// smtp:// ssl:// MIME Explicit type (a MIME type) of the intent data. Component Explicit name of a component class to use for the intent. Extras putExtra(String, Bundle) Flags 5 55 19. Android – IntentFiltersIntentFilters 5 Aside: MIME “ … This set of documents, collectively called the Multipurpose Internet Mail Extensions, or MIME, redefines the format of messages to allow for (1)textual message bodies in character sets other than US-ASCII, (2)an extensible set of different formats for non-textual message bodies, (3)multi-part message bodies, and (4)textual header information in character sets other than US-ASCII.” ____ Source: Multipurpose Internet Mail Extensions. (MIME) Part Two: Media Types. Available at: http://tools.ietf.org/html/rfc2046 NOTE: Current usage of MIME describes content type in general. 6 666 19. Android – IntentFiltersIntentFilters 6 Intent Resolution Khi các Intent được phát ra, Android tìm cách phù hợp nhất đáp ứng yêu cầu. Quyết định thực thi cái gì được dựa trên mức độ mô tả của lời gọi: Explicit Intent chỉ rõ một Component cụ thể ( bằng setComponent(ComponentName) hoặc setClass(Context, Class) ), Nó cho biết chính xác lớp nào cần chạy. Đây là cách thông thường mà một ứng dụng bật các activity nội tại của nó khi người dùng tương tác với ứng dụng. Implicit Intent không chỉ rõ component nào. Tuy nhiên, chúng chứa đủ thông tin để hệ thống xác định các component sẵn có nào là phù hợp nhất để chạy cho intent đó. 7 7777 19. Android – IntentFiltersIntentFilters 7 Intent Resolution “Cơ chế phân giải intent ( intent resolution) về cơ bản là so sánh intent với các mô tả <intent-filter> trong các gói ứng dụng đã cài trong thiết bị.” Thông tin chi tiết: http://developer.android.com/guide/topics/intents/intents-filters.html 8 888 19. Android – IntentFiltersIntentFilters 8 Intent Resolution 9 999 19. Android – IntentFiltersIntentFilters 9 Intent Resolution Như trong minh họa, Activity 3 đã phát một request chung chung để yêu cầu giúp xử lý một tin nhắn đến. Giả sử user đã cài ứng dụng “Fancy SMS” để dùng thay cho ứng dụng “HUMBLE SMS” vốn được cung cấp sẵn trong Android. Khi nhận được implicit Intent, Android sẽ (bằng cách nào đó) báo với user: Bạn có một tin nhắn mới. Tôi có các ứng dụng FANCY SMS và HUMBLE SMS – bạn muốn tôi chạy cái nào? Cho nó làm lựa chọn mặc định nhé? Chọn các ứng cử viên: Để được chọn thực thi, một activity phải: 1. Hỗ trợ action đã chỉ rõ 2. Hỗ trợ kiểu MIME được báo (nếu có) 3. Hỗ trợ tất cả các category được liệt kê trong intent. _____________ RULE OF THUMB: Intent càng cụ thể càng tốt 10 101010 19. Android – IntentFiltersIntentFilters 10 Example: IntentFilters Manifest nói rằng ứng dụng (FancySms) có thể nhận dữ liệu SMS bằng SMSReceiver của nó (lựa chọn thay thế tiềm năng cho ứng dụng SMS mặc định) <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cis493.intentfilters" android:versionCode="1" android:versionName="1.0.0"> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <application android:icon="@drawable/icon" > <activity android:name=".FancySms" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="SMSReceiver" android:enabled="true" > <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> </application> </manifest>