1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang=""> 3 <head> 4 <title>Android 1.6 Compatibility Definition</title> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 6 <meta name="generator" content="pdftohtml 0.36"/> 7 <style type="text/css"> 8 <!-- 9 .xflip { 10 -moz-transform: scaleX(-1); 11 -webkit-transform: scaleX(-1); 12 -o-transform: scaleX(-1); 13 transform: scaleX(-1); 14 filter: fliph; 15 } 16 .yflip { 17 -moz-transform: scaleY(-1); 18 -webkit-transform: scaleY(-1); 19 -o-transform: scaleY(-1); 20 transform: scaleY(-1); 21 filter: flipv; 22 } 23 .xyflip { 24 -moz-transform: scaleX(-1) scaleY(-1); 25 -webkit-transform: scaleX(-1) scaleY(-1); 26 -o-transform: scaleX(-1) scaleY(-1); 27 transform: scaleX(-1) scaleY(-1); 28 filter: fliph + flipv; 29 } 30 --> 31 </style> 32 </head> 33 <body> 34 <a name=1></a><b>Android Compatibility Definition: Android 1.6</b><br/> 35 Android 1.6 r2<br/> 36 Google Inc.<br/> 37 <a href="mailto:compatibility (a] android.com">compatibility (a] android.com</a><br/> 38 <hr/> 39 <a name=2></a><b>Table of Contents</b><br/> 40 <a href="android-1.6-cdd.html#4"><b>1. Introduction ................................................................................................................... 4<br/>2. Resources ...................................................................................................................... 4<br/></b></a><a href="android-1.6-cdd.html#5"><b>3. Software ......................................................................................................................... 5</b></a><br/> 41 <a href="android-1.6-cdd.html#5"><b>3.1. Managed API Compatibility ................................................................................... 5<br/></b></a><a href="android-1.6-cdd.html#6"><b>3.2. Soft API Compatibility ............................................................................................ 6</b></a><br/> 42 <a href="android-1.6-cdd.html#6"><b>3.2.1. Permissions...................................................................................................... 6<br/>3.2.2. Build Parameters ............................................................................................. 6<br/></b></a><a href="android-1.6-cdd.html#8"><b>3.2.3. Intent Compatibility.......................................................................................... 8</b></a><br/> 43 <a href="android-1.6-cdd.html#8"><b>3.2.3.1. Core Application Intents ........................................................................... 8<br/>3.2.3.2. Intent Overrides ......................................................................................... 8<br/>3.2.3.3. Intent Namespaces.................................................................................... 8<br/></b></a><a href="android-1.6-cdd.html#9"><b>3.2.3.4. Broadcast Intents ...................................................................................... 9</b></a><br/> 44 <a href="android-1.6-cdd.html#9"><b>3.3. Native API Compatibility ........................................................................................ 9<br/>3.4. Web API Compatibility ........................................................................................... 9<br/></b></a><a href="android-1.6-cdd.html#10"><b>3.5. API Behavioral Compatibility............................................................................... 10<br/>3.6. API Namespaces................................................................................................... 10<br/></b></a><a href="android-1.6-cdd.html#11"><b>3.7. Virtual Machine Compatibility ............................................................................. 11<br/>3.8. User Interface Compatibility ................................................................................ 11</b></a><br/> 45 <a href="android-1.6-cdd.html#11"><b>3.8.1. Widgets ........................................................................................................... 11<br/></b></a><a href="android-1.6-cdd.html#12"><b>3.8.2. Notifications ................................................................................................... 12<br/>3.8.3. Search ............................................................................................................. 12<br/>3.8.4. Toasts.............................................................................................................. 12</b></a><br/> 46 <a href="android-1.6-cdd.html#12"><b>4. Reference Software Compatibility ............................................................................. 12<br/></b></a><a href="android-1.6-cdd.html#13"><b>5. Application Packaging Compatibility ........................................................................ 13<br/>6. Multimedia Compatibility............................................................................................ 13<br/></b></a><a href="android-1.6-cdd.html#14"><b>7. Developer Tool Compatibility..................................................................................... 14<br/></b></a><a href="android-1.6-cdd.html#15"><b>8. Hardware Compatibility .............................................................................................. 15</b></a><br/> 47 <a href="android-1.6-cdd.html#15"><b>8.1. Display ................................................................................................................... 15</b></a><br/> 48 <a href="android-1.6-cdd.html#15"><b>8.1.1. Standard Display Configurations ................................................................. 15<br/></b></a><a href="android-1.6-cdd.html#16"><b>8.1.2. Non-Standard Display Configurations ......................................................... 16<br/>8.1.3. Display Metrics............................................................................................... 16</b></a><br/> 49 <a href="android-1.6-cdd.html#16"><b>8.2. Keyboard ............................................................................................................... 16<br/>8.3. Non-touch Navigation .......................................................................................... 16<br/></b></a><a href="android-1.6-cdd.html#17"><b>8.4. Screen Orientation................................................................................................ 17<br/>8.5. Touchscreen input................................................................................................ 17<br/>8.6. USB ........................................................................................................................ 17<br/>8.7. Navigation keys .................................................................................................... 17<br/>8.8. WiFi ........................................................................................................................ 17<br/></b></a><a href="android-1.6-cdd.html#18"><b>8.9. Camera .................................................................................................................. 18</b></a><br/> 50 <a href="android-1.6-cdd.html#18"><b>8.9.1. Non-Autofocus Cameras ............................................................................... 18</b></a><br/> 51 <a href="android-1.6-cdd.html#18"><b>8.10. Accelerometer..................................................................................................... 18<br/></b></a><a href="android-1.6-cdd.html#19"><b>8.11. Compass ............................................................................................................. 19<br/>8.12. GPS ...................................................................................................................... 19<br/>8.13. Telephony............................................................................................................ 19<br/>8.14. Volume controls.................................................................................................. 19</b></a><br/> 52 <a href="android-1.6-cdd.html#19"><b>9. Performance Compatibility......................................................................................... 19<br/></b></a><a href="android-1.6-cdd.html#20"><b>10. Security Model Compatibility ................................................................................... 20</b></a><br/> 53 <a href="android-1.6-cdd.html#20"><b>10.1. Permissions ........................................................................................................ 20<br/>10.2. User and Process Isolation ............................................................................... 20<br/></b></a><a href="android-1.6-cdd.html#21"><b>10.3. Filesystem Permissions..................................................................................... 21</b></a><br/> 54 <a href="android-1.6-cdd.html#21"><b>11. Compatibility Test Suite ........................................................................................... 21</b></a><br/> 55 <hr/> 56 <a name=3></a><a href="android-1.6-cdd.html#21"><b>12. Contact Us ................................................................................................................. 21<br/></b></a><a href="android-1.6-cdd.html#22"><b>Appendix A: Required Application Intents ................................................................... 22<br/></b></a><b>Appendix B: Required Broadcast Intents ....................................................................... 0<br/>Appendix C: Future Considerations................................................................................ 0</b><br/> 57 <a href="android-1.6-cdd.html#30"><b>1. Non-telephone Devices ........................................................................................... 30<br/>2. Bluetooth Compatibility .......................................................................................... 30<br/>3. Required Hardware Components........................................................................... 30<br/>4. Sample Applications ............................................................................................... 30<br/>5. Touch Screens ......................................................................................................... 30<br/></b></a><a href="android-1.6-cdd.html#31"><b>6. Performance............................................................................................................. 31</b></a><br/> 58 <hr/> 59 <a name=4></a><b>1. Introduction</b><br/> 60 This document enumerates the requirements that must be met in order for mobile phones to be<br/>compatible with Android 1.6. This definition assumes familiarity with the Android Compatibility Program<br/><a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources, 1].</a><br/> 61 The use of "must", "must not", "required", "shall", "shall not", "should", "should not", "recommended",<br/>"may" and "optional" is per the IETF standard defined in RFC2119 [<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources</a>, 2].<br/> 62 As used in this document, a "device implementer" or "implementer" is a person or organization developing<br/>a hardware/software solution running Android 1.6. A "device implementation" or "implementation" is the<br/>hardware/software solution so developed.<br/> 63 To be considered compatible with Android 1.6, device implementations:<br/> 64 1. MUST meet the requirements presented in this Compatibility Definition, including any documents<br/> 65 incorporated via reference.<br/> 66 2. MUST pass the Android Compatibility Test Suite (CTS) available as part of the Android Open<br/> 67 Source Project [<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources</a>, 3]. The CTS tests most, <b>but not all</b>, components outlined in this<br/>document.<br/> 68 Where this definition or the CTS is silent, ambiguous, or incomplete, it is the responsibility of the device<br/>implementer to ensure compatibility with existing implementations. For this reason, the Android Open<br/>Source Project [<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources</a>, 4] is both the reference <i>and preferred </i>implementation of Android. Device<br/>implementers are strongly encouraged to base their implementations on the "upstream" source code<br/>available from the Android Open Source Project. While some components can hypothetically be replaced<br/>with alternate implementations this practice is strongly discouraged, as passing the CTS tests will become<br/>substantially more difficult. It is the implementer's responsibility to ensure full behavioral compatibility with<br/>the standard Android implementation, including and beyond the Compatibility Test Suite.<br/> 69 <b>2. Resources</b><br/> 70 This Compatibility Definition makes reference to a number of resources that can be obtained here.<br/> 71 1. Android Compatibility Program Overview: <a href="https://sites.google.com/a/android.com/compatibility/how-it-works">https://sites.google.com/a/android.com/compatibility/</a><br/> 72 <a href="https://sites.google.com/a/android.com/compatibility/how-it-works">how-it-works</a><br/> 73 2. IETF RFC2119 Requirement Levels: <a href="http://www.ietf.org/rfc/rfc2119.txt">http://www.ietf.org/rfc/rfc2119.txt<br/></a>3. Compatibility Test Suite: <a href="http://sites.google.com/a/android.com/compatibility/compatibility-test-suite--cts">http://sites.google.com/a/android.com/compatibility/compatibility-test-</a><br/> 74 <a href="http://sites.google.com/a/android.com/compatibility/compatibility-test-suite--cts">suite--cts</a><br/> 75 4. Android Open Source Project: <a href="http://source.android.com/">http://source.android.com/<br/></a>5. API definitions and documentation: <a href="http://developer.android.com/reference/packages.html">http://developer.android.com/reference/packages.html<br/></a>6. Content Providers: <a href="http://code.google.com/android/reference/android/provider/package-summary.html">http://code.google.com/android/reference/android/provider/package-</a><br/> 76 <a href="http://code.google.com/android/reference/android/provider/package-summary.html">summary.html</a><br/> 77 7. Available Resources: <a href="http://code.google.com/android/reference/available-resources.html">http://code.google.com/android/reference/available-resources.html<br/></a>8. Android Manifest files: <a href="http://code.google.com/android/devel/bblocks-manifest.html">http://code.google.com/android/devel/bblocks-manifest.html<br/></a>9. Android Permissions reference: <a href="http://developer.android.com/reference/android/Manifest.permission.html">http://developer.android.com/reference/android/</a><br/> 78 <a href="http://developer.android.com/reference/android/Manifest.permission.html">Manifest.permission.html</a><br/> 79 10. Build Constants: <a href="http://developer.android.com/reference/android/os/Build.html">http://developer.android.com/reference/android/os/Build.html<br/></a>11. WebView: <a href="http://developer.android.com/reference/android/webkit/WebView.html">http://developer.android.com/reference/android/webkit/WebView.html<br/></a>12. Gears Browser Extensions: <a href="http://code.google.com/apis/gears/">http://code.google.com/apis/gears/</a><br/> 80 <hr/> 81 <a name=5></a>13. Dalvik Virtual Machine specification, found in the dalvik/docs directory of a source code<br/> 82 checkout; also available at <a href="http://android.git.kernel.org/?p=platform/dalvik.git;a=tree;f=docs;h=3e2ddbcaf7f370246246f9f03620a7caccbfcb12;hb=HEAD">http://android.git.kernel.org/?p=platform/<br/>dalvik.git;a=tree;f=docs;h=3e2ddbcaf7f370246246f9f03620a7caccbfcb12;hb=HEAD</a><br/> 83 14. AppWidgets: <a href="http://developer.android.com/guide/practices/ui_guidelines/widget_design.html">http://developer.android.com/guide/practices/ui_guidelines/widget_design.html<br/></a>15. Notifications: <a href="http://developer.android.com/guide/topics/ui/notifiers/notifications.html">http://developer.android.com/guide/topics/ui/notifiers/notifications.html<br/></a>16. Status Bar icon style guide: <a href="http://developer.android.com/guide/practices/ui_guidelines/icon_design.html#statusbarstructure">http://developer.android.com/guide/practices/ui_guideline</a><br/> 84 <a href="http://developer.android.com/guide/practices/ui_guidelines/icon_design.html#statusbarstructure">/icon_design.html#statusbarstructure</a><br/> 85 17. Search Manager: <a href="http://developer.android.com/reference/android/app/SearchManager.html">http://developer.android.com/reference/android/app/SearchManager.html<br/></a>18. Toast: <a href="http://developer.android.com/reference/android/widget/Toast.html">http://developer.android.com/reference/android/widget/Toast.html<br/></a>19. Apps For Android: <a href="http://code.google.com/p/apps-for-android">http://code.google.com/p/apps-for-android<br/></a>20. Android apk file description: <a href="http://developer.android.com/guide/topics/fundamentals.html">http://developer.android.com/guide/topics/fundamentals.html<br/></a>21. Android Debug Bridge (adb): <a href="http://code.google.com/android/reference/adb.html">http://code.google.com/android/reference/adb.html<br/></a>22. Dalvik Debug Monitor Service (ddms): <a href="http://code.google.com/android/reference/ddms.html">http://code.google.com/android/reference/ddms.html<br/></a>23. Monkey: <a href="http://developer.android.com/guide/developing/tools/monkey.html">http://developer.android.com/guide/developing/tools/monkey.html<br/></a>24. Display-Independence Documentation:<br/>25. Configuration Constants: <a href="http://developer.android.com/reference/android/content/res/Configuration.html">http://developer.android.com/reference/android/content/res/</a><br/> 86 <a href="http://developer.android.com/reference/android/content/res/Configuration.html">Configuration.html</a><br/> 87 26. Display Metrics: <a href="http://developer.android.com/reference/android/util/DisplayMetrics.html">http://developer.android.com/reference/android/util/DisplayMetrics.html<br/></a>27. Camera: <a href="http://developer.android.com/reference/android/hardware/Camera.html">http://developer.android.com/reference/android/hardware/Camera.html<br/></a>28. Sensor coordinate space: <a href="http://developer.android.com/reference/android/hardware/SensorEvent.html">http://developer.android.com/reference/android/hardware/</a><br/> 88 <a href="http://developer.android.com/reference/android/hardware/SensorEvent.html">SensorEvent.html</a><br/> 89 29. Android Security and Permissions reference: <a href="http://developer.android.com/guide/topics/security/security.html">http://developer.android.com/guide/topics/security/</a><br/> 90 <a href="http://developer.android.com/guide/topics/security/security.html">security.html</a><br/> 91 Many of these resources are derived directly or indirectly from the Android 1.6 SDK, and will be<br/>functionally identical to the information in that SDK's documentation. In any cases where this<br/>Compatibility Definition disagrees with the SDK documentation, the SDK documentation is considered<br/>authoritative. Any technical details provided in the references included above are considered by inclusion<br/>to be part of this Compatibility Definition.<br/> 92 <b>3. Software</b><br/> 93 The Android platform includes both a set of managed ("hard") APIs, and a body of so-called "soft" APIs<br/>such as the Intent system, native-code APIs, and web-application APIs. This section details the hard and<br/>soft APIs that are integral to compatibility, as well as certain other relevant technical and user interface<br/>behaviors. Device implementations MUST comply with all the requirements in this section.<br/> 94 <b>3.1. Managed API Compatibility</b><br/> 95 The managed (Dalvik-based) execution environment is the primary vehicle for Android applications. The<br/>Android application programming interface (API) is the set of Android platform interfaces exposed to<br/>applications running in the managed VM environment. Device implementations MUST provide complete<br/>implementations, including all documented behaviors, of any documented API exposed by the Android<br/>1.6 SDK, such as:<br/> 96 1. Core Android Java-language APIs <a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources, 5].<br/></a>2. Content Providers <a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources</a>, 6].<br/>3. Resources <a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources, 7].<br/></a>4. AndroidManifest.xml attributes and elements [Resources, 8].<br/> 97 <hr/> 98 <a name=6></a>Device implementations MUST NOT omit any managed APIs, alter API interfaces or signatures, deviate<br/>from the documented behavior, or include no-ops, except where specifically allowed by this Compatibility<br/>Definition.<br/> 99 <b>3.2. Soft API Compatibility</b><br/> 100 In addition to the managed APIs from Section 3.1, Android also includes a significant runtime-only "soft"<br/>API, in the form of such things such as Intents, permissions, and similar aspects of Android applications<br/>that cannot be enforced at application compile time. This section details the "soft" APIs and system<br/>behaviors required for compatibility with Android 1.6. Device implementations MUST meet all the<br/>requirements presented in this section.<br/> 101 <b>3.2.1. Permissions</b><br/> 102 Device implementers MUST support and enforce all permission constants as documented by the<br/>Permission reference page [<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en&pli=1#resources">Resources</a>, 9]. Note that Section 10 lists addtional requirements related to<br/>the Android security model.<br/> 103 <b>3.2.2. Build Parameters</b><br/> 104 The Android APIs include a number of constants on the android.os.Build class <a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources, 10] </a>that are<br/>intended to describe the current device. To provide consistent, meaningful values across device<br/>implementations, the table below includes additional restrictions on the formats of these values to which<br/>device implementations MUST conform.<br/> 105 <b>Parameter</b><br/> 106 <b>Comments</b><br/> 107 The version of the currently-executing Android system, in human-<br/> 108 android.os.Build.VERSION.RELEASE<br/> 109 readable format. For Android 1.6, this field MUST have the string value<br/>"1.6".<br/> 110 The version of the currently-executing Android system, in a format<br/> 111 android.os.Build.VERSION.SDK<br/> 112 accessible to third-party application code. For Android 1.6, this field<br/>MUST have the integer value 4.<br/> 113 A value chosen by the device implementer designating the specific build<br/>of the currently-executing Android system, in human-readable format.<br/>This value MUST NOT be re-used for different builds shipped to end<br/> 114 android.os.Build.VERSION.INCREMENTAL users. A typical use of this field is to indicate which build number or<br/> 115 source-control change identifier was used to generate the build. There<br/>are no requirements on the specific format of this field, except that it<br/>MUST NOT be null or the empty string ("").<br/> 116 A value chosen by the device implementer identifying the specific internal<br/>hardware used by the device, in human-readable format. A possible use<br/> 117 android.os.Build.BOARD<br/> 118 of this field is to indicate the specific revision of the board powering the<br/>device. There are no requirements on the specific format of this field,<br/>except that it MUST NOT be null or the empty string ("").<br/> 119 A value chosen by the device implementer identifying the name of the<br/> 120 android.os.Build.BRAND<br/> 121 company, organization, individual, etc. who produced the device, in<br/>human-readable format. A possible use of this field is to indicate the OEM<br/> 122 <hr/> 123 <a name=7></a>and/or carrier who sold the device. There are no requirements on the<br/>specific format of this field, except that it MUST NOT be null or the empty<br/>string ("").<br/> 124 A value chosen by the device implementer identifying the specific<br/>configuration or revision of the body (sometimes called "industrial<br/> 125 android.os.Build.DEVICE<br/> 126 design") of the device. There are no requirements on the specific format<br/>of this field, except that it MUST NOT be null or the empty string ("").<br/> 127 A string that uniquely identifies this build. It SHOULD be reasonably<br/>human-readable. It MUST follow this template:<br/>$(PRODUCT_BRAND)/$(PRODUCT_NAME)/$(PRODUCT_DEVICE)/<br/>$(TARGET_BOOTLOADER_BOARD_NAME):$(PLATFORM_VERSION)/<br/>$(BUILD_ID)/$(BUILD_NUMBER):$(TARGET_BUILD_VARIANT)/<br/> 128 android.os.Build.FINGERPRINT<br/> 129 $(BUILD_VERSION_TAGS)<br/>For example: acme/mydevicel/generic/generic:Donut/ERC77/<br/>3359:userdebug/test-keys<br/>The fingerprint MUST NOT include spaces. If other fields included in the<br/>template above have spaces, they SHOULD be replaced with the ASCII<br/>underscore ("_") character in the fingerprint.<br/> 130 A string that uniquely identifies the host the build was built on, in human<br/> 131 android.os.Build.HOST<br/> 132 readable format. There are no requirements on the specific format of this<br/>field, except that it MUST NOT be null or the empty string ("").<br/> 133 An identifier chosen by the device implementer to refer to a specific<br/>release, in human readable format. This field can by the same as<br/>android.os.Build.VERSION.INCREMENTAL, but SHOULD be a value<br/> 134 android.os.Build.ID<br/> 135 intended to be somewhat meaningful for end users. There are no<br/>requirements on the specific format of this field, except that it MUST NOT<br/>be null or the empty string ("").<br/> 136 A value chosen by the device implementer containing the name of the<br/>device as known to the end user. This SHOULD be the same name<br/> 137 android.os.Build.MODEL<br/> 138 under which the device is marketed and sold to end users. There are no<br/>requirements on the specific format of this field, except that it MUST NOT<br/>be null or the empty string ("").<br/> 139 A value chosen by the device implementer containing the development<br/>name or code name of the device. MUST be human-readable, but is not<br/> 140 android.os.Build.PRODUCT<br/> 141 necessarily intended for view by end users. There are no requirements<br/>on the specific format of this field, except that it MUST NOT be null or the<br/>empty string ("").<br/> 142 A comma-separated list of tags chosen by the device implementer that<br/>further distinguish the build. For example, "unsigned,debug". This field<br/> 143 android.os.Build.TAGS<br/> 144 MUST NOT be null or the empty string (""), but a single tag (such as<br/>"release") is fine.<br/> 145 android.os.Build.TIME<br/> 146 A value representing the timestamp of when the build occurred.<br/> 147 A value chosen by the device implementer specifying the runtime<br/>configuration of the build. This field SHOULD have one of the values<br/> 148 android.os.Build.TYPE<br/> 149 corresponding to the three typical Android runtime configurations: "user",<br/>"userdebug", or "eng".<br/> 150 A name or user ID of the user (or automated user) that generated the<br/> 151 android.os.Build.USER<br/> 152 build. There are no requirements on the specific format of this field,<br/>except that it MUST NOT be null or the empty string ("").<br/> 153 <hr/> 154 <a name=8></a><b>3.2.3. Intent Compatibility</b><br/> 155 Android uses Intents to achieve loosely-coupled integration between applications. This section describes<br/>requirements related to the Intent patterns that MUST be honored by device implementations. By<br/>"honored", it is meant that the device implementer MUST provide an Android Activity, Service, or other<br/>component that specifies a matching Intent filter and binds to and implements correct behavior for each<br/>specified Intent pattern.<br/> 156 <b>3.2.3.1. Core Application Intents</b><br/> 157 The Android upstream project defines a number of core applications, such as a phone dialer, calendar,<br/>contacts book, music player, and so on. Device implementers MAY replace these applications with<br/>alternative versions.<br/> 158 However, any such alternative versions MUST honor the same Intent patterns provided by the upstream<br/>project. (For example, if a device contains an alternative music player, it must still honor the Intent pattern<br/>issued by third-party applications to pick a song.) Device implementions MUST support all Intent patterns<br/>listed in Appendix A.<br/> 159 <b>3.2.3.2. Intent Overrides</b><br/> 160 As Android is an extensible platform, device implementers MUST allow each Intent pattern described in<br/>Appendix A to be overridden by third-party applications. The upstream Android open source project<br/>allows this by default; device implementers MUST NOT attach special privileges to system applications'<br/>use of these Intent patterns, or prevent third-party applications from binding to and assuming control of<br/>these patterns. This prohibition specifically includes disabling the "Chooser" user interface which allows<br/>the user to select between multiple applications which all handle the same Intent pattern.<br/> 161 <b>3.2.3.3. Intent Namespaces</b><br/> 162 Device implementers MUST NOT include any Android component that honors any new Intent or<br/>Broadcast Intent patterns using an ACTION, CATEGORY, or other key string in the android.* namespace.<br/>Device implementers MUST NOT include any Android components that honor any new Intent or<br/>Broadcast Intent patterns using an ACTION, CATEGORY, or other key string in a package space<br/>belonging to another organization. Device implementers MUST NOT alter or extend any of the Intent<br/>patterns listed in Appendices A or B.<br/> 163 This prohibition is analogous to that specified for Java language classes in Section 3.6.<br/> 164 <hr/> 165 <a name=9></a><b>3.2.3.4. Broadcast Intents</b><br/> 166 Third-party applications rely on the platform to broadcast certain Intents to notify them of changes in the<br/>hardware or software environment. Android-compatible devices MUST broadcast the public broadcast<br/>Intents in response to appropriate system events. A list of required Broadcast Intents is provided in<br/>Appendix B; however, note that the SDK may define additional broadcast intents, which MUST also be<br/>honored.<br/> 167 <b>3.3. Native API Compatibility</b><br/> 168 Managed code running in Dalvik can call into native code provided in the application .apk file as an ELF<br/>.so file compiled for the appropriate device hardware architecture. Device implementations MUST include<br/>support for code running in the managed environment to call into native code, using the standard Java<br/>Native Interface (JNI) semantics. The following APIs must be available to native code:<br/> 169  <b>libc (C library)<br/></b> <b>libm (math library)<br/></b> <b>JNI interface<br/></b> <b>libz (Zlib compression)<br/></b> <b>liblog (Android logging)<br/></b> <b>Minimal support for C++<br/></b> <b>OpenGL ES 1.1</b><br/> 170 These libraries MUST be source-compatible (i.e. header compatible) and binary-compatible (for a given<br/>processor architecture) with the versions provided in Bionic by the Android Open Source project. Since<br/>the Bionic implementations are not fully compatible with other implementations such as the GNU C<br/>library, device implementers SHOULD use the Android implementation. If device implementers use a<br/>different implementation of these libraries, they must ensure header and binary compatibility.<br/> 171 Native code compatibility is challenging. For this reason, we wish to repeat that device implementers are<br/>VERY strongly encouraged to use the upstream implementations of the libraries listed above, to help<br/>ensure compatibility.<br/> 172 <b>3.4. Web API Compatibility</b><br/> 173 Many developers and applications rely on the behavior of the android.webkit.WebView class [<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources</a>,<br/>11] for their user interfaces, so the WebView implementation must be compatible across Android<br/>implementations. The Android Open Source implementation uses the WebKit rendering engine version to<br/>implement the WebView.<br/> 174 Because it is not feasible to develop a comprehensive test suite for a web browser, device implementers<br/>MUST use the specific upstream build of WebKit in the WebView implementation. Specifically:<br/> 175  WebView MUST use the 528.5+ WebKit build from the upstream Android Open Source tree for<br/> 176 Android 1.6. This build includes a specific set of functionality and security fixes for the WebView.<br/> 177  The user agent string reported by the WebView MUST be in this format:<br/> 178 Mozilla/5.0 (Linux; U; Android 1.6; <language>-<country>; <device<br/>name>; Build/<build ID>) AppleWebKit/528.5+ (KHTML, like Gecko)<br/>Version/3.1.2 Mobile Safari/525.20.1<br/> 179 <hr/> 180 <a name=10></a> The "<device name>" string MUST be the same as the value for<br/> 181 android.os.Build.MODEL<br/> 182  The "<build ID>" string MUST be the same as the value for android.os.Build.ID.<br/> The "<language>" and "<country>" strings SHOULD follow the usual conventions for<br/> 183 country code and language, and SHOULD refer to the current locale of the device at the<br/>time of the request.<br/> 184 Implementations MAY ship a custom user agent string in the standalone Browser application. What's<br/>more, the standalone Browser MAY be based on an alternate browser technology (such as Firefox,<br/>Opera, etc.) However, even if an alternate Browser application is shipped, the WebView component<br/>provided to third-party applications MUST be based on WebKit, as above.<br/> 185 The standalone Browser application SHOULD include support for Gears [<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources, </a>12] and MAY<br/>include support for some or all of HTML5.<br/> 186 <b>3.5. API Behavioral Compatibility</b><br/> 187 The behaviors of each of the API types (managed, soft, native, and web) must be consistent with the<br/>preferred implementation of Android available from the Android Open Source Project.<br/> 188 Some specific areas of compatibility are:<br/> 189  Devices MUST NOT change the behavior or meaning of a standard Intent<br/> Devices MUST NOT alter the lifecycle or lifecycle semantics of a particular type of system<br/> 190 component (such as Service, Activity, ContentProvider, etc.)<br/> 191  Devices MUST NOT change the semantics of a particular permission<br/> 192 The above list is not comprehensive, and the onus is on device implementers to ensure behavioral<br/>compatibility. For this reason, device implementers SHOULD use the source code available via the<br/>Android Open Source Project where possible, rather than re-implement significant parts of the system.<br/> 193 The Compatibility Test Suite (CTS) tests significant portions of the platform for behavioral compatibility,<br/>but not all. It is the responsibility of the implementer to ensure behavioral compatibility with the Android<br/>Open Source Project.<br/> 194 <b>3.6. API Namespaces</b><br/> 195 Android follows the package and class namespace conventions defined by the Java programming<br/>language. To ensure compatibility with third-party applications, device implementers MUST NOT make<br/>any prohibited modifications (see below) to these package namespaces:<br/> 196  java.*<br/> javax.*<br/> sun.*<br/> android.*<br/> com.android.*<br/> 197 Prohibited modifications include:<br/> 198  Device implementations MUST NOT modify the publicly exposed APIs on the Android platform<br/> 199 by changing any method or class signatures, or by removing classes or class fields.<br/> 200 <hr/> 201 <a name=11></a> Device implementers MAY modify the underlying implementation of the APIs, but such<br/> 202 modifications MUST NOT impact the stated behavior and Java-language signature of any<br/>publicly exposed APIs.<br/> 203  Device implementers MUST NOT add any publicly exposed elements (such as classes or<br/> 204 interfaces, or fields or methods to existing classes or interfaces) to the APIs above.<br/> 205 A "publicly exposed element" is any construct which is not decorated with the "@hide" marker in the<br/>upstream Android source code. In other words, device implementers MUST NOT expose new APIs or<br/>alter existing APIs in the namespaces noted above. Device implementers MAY make internal-only<br/>modifications, but those modifications MUST NOT be advertised or otherwise exposed to developers.<br/> 206 Device implementers MAY add custom APIs, but any such APIs MUST NOT be in a namespace owned<br/>by or referring to another organization. For instance, device implementers MUST NOT add APIs to the<br/>com.google.* or similar namespace; only Google may do so. Similarly, Google MUST NOT add APIs to<br/>other companies' namespaces.<br/> 207 If a device implementer proposes to improve one of the package namespaces above (such as by adding<br/>useful new functionality to an existing API, or adding a new API), the implementer SHOULD visit<br/>source.android.com and begin the process for contributing changes and code, according to the<br/>information on that site.<br/> 208 Note that the restrictions above correspond to standard conventions for naming APIs in the Java<br/>programming language; this section simply aims to reinforce those conventions and make them binding<br/>through inclusion in this compatibility definition.<br/> 209 <b>3.7. Virtual Machine Compatibility</b><br/> 210 A compatible Android device must support the full Dalvik Executable (DEX) bytecode specification and<br/>Dalvik Virtual Machine semantics [Resources, 13].<br/> 211 <b>3.8. User Interface Compatibility</b><br/> 212 The Android platform includes some developer APIs that allow developers to hook into the system user<br/>interface. Device implementations MUST incorporate these standard UI APIs into custom user interfaces<br/>they develop, as explained below.<br/> 213 <b>3.8.1. Widgets</b><br/> 214 Android defines a component type and corresponding API and lifecycle that allows applications to expose<br/><a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">an "AppWidget" to the end user [Resources</a>, 14]<b>. </b>The Android Open Source reference release includes a<br/>Launcher application that includes user interface elements allowing the user to add, view, and remove<br/>AppWidgets from the home screen.<br/> 215 Device implementers MAY substitute an alternative to the reference Launcher (i.e. home screen).<br/>Alternative Launchers SHOULD include built-in support for AppWidgets, and expose user interface<br/>elements to add, view, and remove AppWidgets directly within the Launcher. Alternative Launchers MAY<br/>omit these user interface elements; however, if they are omitted, the device implementer MUST provide a<br/>separate application accessible from the Launcher that allows users to add, view, and remove<br/>AppWidgets.<br/> 216 <hr/> 217 <a name=12></a><b>3.8.2. Notifications</b><br/> 218 Android includes APIs that allow developers to notify users of notable events [Resources, 15]. Device<br/>implementers MUST provide support for each class of notification so defined; specifically: sounds,<br/>vibration, light and status bar.<br/> 219 Additionally, the implementation MUST correctly render and all resources (icons, sound files, etc.)<br/><a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">provided for in the APIs [Resources, </a>7], or in the <a href="http://docs.google.com/a/google.com/Doc?docid=0AfF4TgU8QNgVZGZnYjR3c2dfMjI4N3hjcXY3cHM&hl=en#resources">Status Bar icon style guide [Resources</a>, 16]. Device<br/>implementers MAY provide an alternative user experience for notifications than that provided by the<br/>reference Android Open Source implementation; however, such alternative notification systems MUST<br/>support existing notification resources, as above.<br/> 220 <b>3.8.3. Search</b><br/> 221 Android includes <a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">APIs [Resources, </a>17] that allow developers to incorporate search into their applications,<br/>and expose their application's data into the global system search. Generally speaking, this functionality<br/>consists of a single, system-wide user interface that allows users to enter queries, displays suggestions<br/>as users type, and displays results. The Android APIs allow developers to reuse this interface to provide<br/>search within their own apps, and allow developers to supply results to the common global search user<br/>interface.<br/> 222 Device implementations MUST include a single, shared, system-wide search user interface capable of<br/>real-time suggestions in response to user input. Device implementations MUST implement the APIs that<br/>allow developers to reuse this user interface to provide search within their own applications.<br/> 223 Device implementations MUST implement the APIs that allow third-party applications to add suggestions<br/>to the search box when it is run in global search mode. If no third-party applications are installed that<br/>make use of this functionality, the default behavior SHOULD be to display web search engine results and<br/>suggestions.<br/> 224 Device implementations MAY ship alternate search user interfaces, but SHOULD include a hard or soft<br/>dedicated search button, that can be used at any time within any app to invoke the search framework,<br/>with the behavior provided for in the API documentation.<br/> 225 <b>3.8.4. Toasts</b><br/> 226 Applications can use the "Toast" API (defined in [<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources, </a>18]) to display short non-modal strings to the<br/>end user, that disappear after a brief period of time. Device implementations MUST display Toasts from<br/>applications to end users in some high-visibility manner.<br/> 227 <b>4. Reference Software Compatibility</b><br/> 228 Device implementers MUST test implementation compatibility using the following open-source<br/>applications:<br/> 229  Calculator (included in SDK)<br/> Lunar Lander (included in SDK)<br/> ApiDemos (included in SDK)<br/> The "Apps for Android" applications [<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources, </a>19]<br/> 230 Each app above MUST launch and behave correctly on the implementation, for the implementation to be<br/> 231 <hr/> 232 <a name=13></a>considered compatible.<br/> 233 <b>5. Application Packaging Compatibility</b><br/> 234 Device implementations MUST install and run Android ".apk" files as generated by the "aapt" tool<br/>included in the official Android SDK [<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources</a>, 20].<br/> 235 Devices implementations MUST NOT extend either the .apk, Android Manifest, or Dalvik bytecode<br/>formats in such a way that would prevent those files from installing and running correctly on other<br/>compatible devices. Device implementers SHOULD use the reference upstream implementation of Dalvik,<br/>and the reference implementation's package management system.<br/> 236 <b>6. Multimedia Compatibility</b><br/> 237 A compatible Android device must support the following multimedia codecs. All of these codecs are<br/>provided as software implementations in the preferred Android implementation from the Android Open<br/>Source Project [<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources</a>, 4].<br/> 238 Please note that neither Google nor the Open Handset Alliance make any representation that these<br/>codecs are unencumbered by third-party patents. Those intending to use this source code in hardware or<br/>software products are advised that implementations of this code, including in open source software or<br/>shareware, may require patent licenses from the relevant patent holders.<br/> 239 <b>Audio<br/>Name</b><br/> 240 <b>Encoder Decoder Details</b><br/> 241 <b>Files Supported</b><br/> 242 Mono/Stereo content in any<br/> 243 3GPP (.3gp) and<br/> 244 combination of standard bit rates<br/> 245 MPEG-4 (.mp4, .m4a)<br/> 246 AAC LC/LTP<br/> 247 X<br/> 248 up to 160 kbps and sampling rates files. No support for raw<br/>between 8 to 48kHz<br/> 249 AAC (.aac)<br/> 250 Mono/Stereo content in any<br/> 251 3GPP (.3gp) and<br/> 252 HE-AACv1<br/> 253 combination of standard bit rates<br/> 254 MPEG-4 (.mp4, .m4a)<br/> 255 X<br/> 256 (AAC+)<br/> 257 up to 96 kbps and sampling rates files. No support for raw<br/>between 8 to 48kHz<br/> 258 AAC (.aac)<br/> 259 Mono/Stereo content in any<br/> 260 HE-AACv2<br/> 261 3GPP (.3gp) and<br/> 262 combination of standard bit rates<br/> 263 (enhanced<br/> 264 MPEG-4 (.mp4, .m4a)<br/> 265 X<br/> 266 up to 96 kbps and sampling rates<br/> 267 AAC+)<br/> 268 files. No support for raw<br/> 269 between 8 to 48kHz<br/> 270 AAC (.aac)<br/> 271 AMR-NB<br/> 272 4.75 to 12.2 kbps sampled @<br/> 273 3GPP (.3gp) files<br/> 274 X<br/> 275 X<br/> 276 8kHz<br/> 277 AMR-WB<br/> 278 9 rates from 6.60 kbit/s to 23.85<br/> 279 -3GPP (.3gp) files<br/> 280 X<br/> 281 kbit/s sampled @ 16kHz<br/> 282 MP3<br/> 283 Mono/Stereo 8-320Kbps constant MP3 (.mp3) files<br/> 284 X<br/> 285 (CBR) or variable bit-rate (VBR)<br/> 286 Type 0 and 1 (.mid, .xmf,<br/> 287 MIDI Type 0 and 1. DLS Version 1<br/> 288 MIDI<br/> 289 X<br/> 290 .mxmf). Also RTTTL/RTX<br/> 291 and 2. XMF and Mobile XMF.<br/> 292 (.rtttl, .rtx), OTA (.ota),<br/> 293 <hr/> 294 <a name=14></a>Support for ringtone formats<br/> 295 and iMelody (.imy)<br/> 296 RTTTL/RTX, OTA, and iMelody<br/> 297 Ogg Vorbis<br/> 298 .ogg<br/> 299 X<br/> 300 8- and 16-bit linear PCM (rates up<br/> 301 PCM<br/> 302 X<br/> 303 WAVE<br/> 304 to limit of hardware)<br/> 305 <b>Image</b><br/> 306 <b>Files</b><br/> 307 <b>Name</b><br/> 308 <b>Encoder Decoder Details</b><br/> 309 <b>Supported</b><br/> 310 JPEG<br/> 311 X<br/> 312 X<br/> 313 base+progressive<br/> 314 GIF<br/> 315 X<br/> 316 PNG<br/> 317 X<br/> 318 X<br/> 319 BMP<br/> 320 X<br/> 321 <b>Video</b><br/> 322 <b>Files</b><br/> 323 <b>Name</b><br/> 324 <b>Encoder Decoder Details</b><br/> 325 <b>Supported</b><br/> 326 3GPP (.3gp)<br/> 327 H.263<br/> 328 X<br/> 329 X<br/> 330 files<br/> 331 3GPP (.3gp)<br/> 332 H.264<br/> 333 X<br/> 334 and MPEG-4<br/>(.mp4) files<br/> 335 MPEG4<br/> 336 X<br/> 337 3GPP (.3gp) file<br/> 338 SP<br/> 339 <b>7. Developer Tool Compatibility</b><br/> 340 Device implemenations MUST support the Android Developer Tools provided in the Android SDK.<br/>Specifically, Android-compatible devices MUST be compatible with:<br/> 341  <b>Android Debug Bridge or adb </b><a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources</a>, 21]<br/> 342 Device implementations MUST support all adb functions as documented in the Android<br/>SDK. The device-side adb daemon SHOULD be inactive by default, but there MUST be a user-<br/>accessible mechanism to turn on the Android Debug Bridge.<br/> 343  <b>Dalvik Debug Monitor Service or ddms </b><a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources</a>, 22]<br/> 344 Device implementations MUST support all ddms features as documented in the Android SDK.<br/>As ddms uses adb, support for ddms SHOULD be inactive by default, but MUST be supported<br/>whenever the user has activated the Android Debug Bridge, as above.<br/> 345 <hr/> 346 <a name=15></a> <b>Monkey </b>[Resources, 23]<br/> 347 Device implementations MUST include the Monkey framework, and make it available for<br/>applications to use.<br/> 348 <b>8. Hardware Compatibility</b><br/> 349 Android is intended to support device implementers creating innovative form factors and configurations.<br/>At the same time Android developers expect certain hardware, sensors and APIs across all Android<br/>device. This section lists the hardware features that all Android 1.6 compatible devices must support. In<br/>Android 1.6, the majority of hardware features (such as WiFi, compass, and accelerometer) are required.<br/> 350 If a device includes a particular hardware component that has a corresponding API for third-party<br/>developers, the device implementation MUST implement that API as defined in the Android SDK<br/>documentation.<br/> 351 <b>8.1. Display</b><br/> 352 Android 1.6 includes facilities that perform certain automatic scaling and transformation operations under<br/>some circumstances, to ensure that third-party applications run reasonably well on hardware<br/>configurations for which they were not necessarily explicitly designed <a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources, 24]</a>. Devices MUST<br/>properly implement these behaviors, as detailed in this section.<br/> 353 <b>8.1.1. Standard Display Configurations</b><br/> 354 This table lists the standard screen configurations considered compatible with Android:<br/> 355 Diagonal<br/> 356 Screen Size<br/> 357 Screen Density<br/> 358 Screen Type<br/> 359 Width (Pixels)<br/> 360 Height (Pixels)<br/> 361 Length Range<br/> 362 Group<br/> 363 Group<br/> 364 (inches)<br/> 365 QVGA<br/> 366 240<br/> 367 320<br/> 368 2.6 - 3.0<br/> 369 Small<br/> 370 Low<br/> 371 WQVGA<br/> 372 240<br/> 373 400<br/> 374 3.2 - 3.5<br/> 375 Normal<br/> 376 Low<br/> 377 FWQVGA<br/> 378 240<br/> 379 432<br/> 380 3.5 - 3.8<br/> 381 Normal<br/> 382 Low<br/> 383 HVGA<br/> 384 320<br/> 385 480<br/> 386 3.0 - 3.5<br/> 387 Normal<br/> 388 Medium<br/> 389 WVGA<br/> 390 480<br/> 391 800<br/> 392 3.3 - 4.0<br/> 393 Normal<br/> 394 High<br/> 395 FWVGA<br/> 396 480<br/> 397 854<br/> 398 3.5 - 4.0<br/> 399 Normal<br/> 400 High<br/> 401 WVGA<br/> 402 480<br/> 403 800<br/> 404 4.8 - 5.5<br/> 405 Large<br/> 406 Medium<br/> 407 FWVGA<br/> 408 480<br/> 409 854<br/> 410 5.0 - 5.8<br/> 411 Large<br/> 412 Medium<br/> 413 Device implementations corresponding to one of the standard configurations above MUST be configured<br/>to report the indicated screen size to applications via the android.content.res.Configuration [<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources,<br/></a>25] class.<br/> 414 Some .apk packages have manifests that do not identify them as supporting a specific density range.<br/>When running such applications, the following constraints apply:<br/> 415 <hr/> 416 <a name=16></a> Device implementations MUST interpret any resources that are present as defaulting to<br/> 417 "medium" (known as "mdpi" in the SDK documentation.)<br/> 418  When operating on a "low" density screen, device implementations MUST scale down medium/<br/> 419 mdpi assets by a factor of 0.75.<br/> 420  When operating on a "high" density screen, device implementations MUST scale up medium/<br/> 421 mdpi assets by a factor of 1.5.<br/> 422  Device implementations MUST NOT scale assets within a density range, and MUST scale<br/> 423 assets by exactly these factors between density ranges.<br/> 424 <b>8.1.2. Non-Standard Display Configurations</b><br/> 425 Display configurations that do not match one of the standard configurations listed in Section 8.2.1 require<br/>additional consideration and work to be compatible. Device implementers MUST contact Android<br/>Compatibility Team as provided for in Section 12 to obtain classifications for screen-size bucket, density,<br/>and scaling factor. When provided with this information, device implementations MUST implement them<br/>as specified.<br/> 426 Note that some display configurations (such as very large or very small screens, and some aspect ratios)<br/>are fundamentally incompatible with Android 1.6; therefore device implementers are encouraged to<br/>contact Android Compatibility Team as early as possible in the development process.<br/> 427 <b>8.1.3. Display Metrics</b><br/> 428 Device implementations MUST report correct values for all display metrics defined in<br/>android.util.DisplayMetrics <a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources</a>, 26].<br/> 429 <b>8.2. Keyboard</b><br/> 430 Device implementations:<br/> 431  MUST include support for the Input Management Framework (which allows third party<br/> 432 developers to create Input Management Engines -- i.e. soft keyboard) as detailed at<br/>developer.android.com<br/> 433  MUST provide at least one soft keyboard implementation (regardless of whether a hard<br/> 434 keyboard is present)<br/> 435  MAY include additional soft keyboard implementations<br/> MAY include a hardware keyboard<br/> MUST NOT include a hardware keyboard that does not match one of the formats specified<br/> 436 in android.content.res.Configuration [<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources, 25] </a>(that is, QWERTY, or 12-key)<br/> 437 <b>8.3. Non-touch Navigation</b><br/> 438 Device implementations:<br/> 439  MAY omit non-touch navigation options (that is, may omit a trackball, 5-way directional pad, or<br/> 440 wheel)<br/> 441  MUST report via android.content.res.Configuration <a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources</a>, 25] the correct value for the<br/> 442 device's hardware<br/> 443 <hr/> 444 <a name=17></a><b>8.4. Screen Orientation</b><br/> 445 Compatible devices MUST support dynamic orientation by applications to either portrait or landscape<br/>screen orientation. That is, the device must respect the application's request for a specific screen<br/>orientation. Device implementations MAY select either portrait or landscape orientation as the default.<br/> 446 Devices MUST report the correct value for the device's current orientation, whenever queried via the<br/>android.content.res.Configuration.orientation, android.view.Display.getOrientation(), or other APIs.<br/> 447 <b>8.5. Touchscreen input</b><br/> 448 Device implementations:<br/> 449  MUST have a touchscreen<br/> MAY have either capacative or resistive touchscreen<br/> MUST report the value of android.content.res.Configuration [<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources, 25] </a>reflecting<br/> 450 corresponding to the type of the specific touchscreen on the device<br/> 451 <b>8.6. USB</b><br/> 452 Device implementations:<br/> 453  MUST implement a USB client, connectable to a USB host with a standard USB-A port<br/> MUST implement the Android Debug Bridge over USB (as described in Section 7)<br/> MUST implement a USB mass storage client for the removable/media storage is present in the<br/> 454 device<br/> 455  SHOULD use the micro USB form factor on the device side<br/> SHOULD implement support for the USB Mass Storage specification (so that either removable<br/> 456 or fixed storage on the device can be accessed from a host PC)<br/> 457  MAY include a non-standard port on the device side, but if so MUST ship with a cable capable of<br/> 458 connecting the custom pinout to standard USB-A port<br/> 459 <b>8.7. Navigation keys</b><br/> 460 The Home, Menu and Back functions are essential to the Android navigation paradigm. Device<br/>implementations MUST make these functions available to the user at all times, regardless of application<br/>state. These functions SHOULD be implemented via dedicated buttons. They MAY be implemented<br/>using software, gestures, touch panel, etc., but if so they MUST be always accessible and not obscure or<br/>interfere with the available application display area.<br/> 461 Device implementers SHOULD also provide a dedicated search key. Device implementers MAY also<br/>provide send and end keys for phone calls.<br/> 462 <b>8.8. WiFi</b><br/> 463 Device implementations MUST support 802.11b and 802.11g, and MAY support 802.11a.<br/> 464 <hr/> 465 <a name=18></a><b>8.9. Camera</b><br/> 466 Device implementations MUST include a camera. The included camera:<br/> 467  MUST have a resolution of at least 2 megapixels<br/> SHOULD have either hardware auto-focus, or software auto-focus implemented in the camera<br/> 468 driver (transparent to application software)<br/> 469  MAY have fixed-focus or EDOF (extended depth of field) hardware<br/> MAY include a flash. If the Camera includes a flash, the flash lamp MUST NOT be lit while an<br/> 470 android.hardware.Camera.PreviewCallback instance has been registered on a Camera preview<br/>surface.<br/> 471 Device implementations MUST implement the following behaviors for the camera-related APIs<br/><a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources, 27]</a>:<br/> 472 1. If an application has never called android.hardware.Camera.Parameters.setPreviewFormat(int),<br/> 473 then the device MUST use android.hardware.PixelFormat.YCbCr_420_SP for preview data<br/>provided to application callbacks.<br/> 474 2. If an application registers an android.hardware.Camera.PreviewCallback instance and the<br/> 475 system calls the onPreviewFrame() method when the preview format is YCbCr_420_SP, the<br/>data in the byte[] passed into onPreviewFrame() must further be in the NV21 encoding format.<br/>(This is the format used natively by the 7k hardware family.) That is, NV21 MUST be the default.<br/> 476 <b>8.9.1. Non-Autofocus Cameras</b><br/> 477 If a device lacks an autofocus camera, the device implementer MUST meet the additional requirements in<br/>this section. Device implementations MUST implement the full Camera API included in the Android 1.6<br/>SDK documentation in some reasonable way, regardless of actual camera hardware's capabilities.<br/> 478 For Android 1.6, if the camera lacks auto-focus, the device implementation MUST adhere to the following:<br/> 479 1. The system MUST include a read-only system property named "ro.workaround.noautofocus"<br/> 480 with the value of "1". This value is intended to be used by applications such as Android Market to<br/>selectively identify device capabilities, and will be replaced in a future version of Android with a<br/>robust API.<br/> 481 2. If an application calls android.hardware.Camera.autoFocus(), the system MUST call the<br/> 482 onAutoFocus() callback method on any registered<br/>android.hardware.Camera.AutoFocusCallback instances, even though no focusing actually<br/>happened. This is to avoid having existing applications break by waiting forever for an autofocus<br/>callback that will never come.<br/> 483 3. The call to the AutoFocusCallback.onAutoFocus() method MUST be triggered by the driver or<br/> 484 framework in a new event on the main framework Looper thread. That is, Camera.autoFocus()<br/>MUST NOT directly call AutoFocusCallback.onAutoFocus() since this violates the Android<br/>framework threading model and will break apps.<br/> 485 <b>8.10. Accelerometer</b><br/> 486 Device implementations MUST include a 3-axis accelerometer and MUST be able to deliver events at at<br/>least 50 Hz. The coordinate system used by the accelerometer MUST comply with the Android sensor<br/>coordinate system as detailed in the Android API<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources_656432673567906_7490">s [Resources</a>, 28].<br/> 487 <hr/> 488 <a name=19></a><b>8.11. Compass</b><br/> 489 Device implementations MUST include a 3-axis compass and MUST be able to deliver events at at least<br/>10 Hz. The coordinate system used by the compass MUST comply with the Android sensor coordinate<br/><a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources_656432673567906_7490">system as defined in the Android API [Resources</a>, 28].<br/> 490 <b>8.12. GPS</b><br/> 491 Device implementations MUST include a GPS, and SHOULD include some form of "assisted GPS"<br/>technique to minimize GPS lock-on time.<br/> 492 <b>8.13. Telephony</b><br/> 493 Device implementations:<br/> 494  MUST include either GSM or CDMA telephony<br/> MUST implement the appropriate APIs as detailed in the Android SDK documentation at<br/> 495 developer.android.com<br/> 496 Note that this requirement implies that non-phone devices are not compatible with Android 1.6; Android<br/>1.6 devices MUST include telephony hardware. Please see Appendix C for information on non-phone<br/>devices.<br/> 497 <b>8.14. Volume controls</b><br/> 498 Android-compatible devices MUST include a mechanism to allow the user to increase and decrease the<br/>audio volume. Device implementations MUST make these functions available to the user at all times,<br/>regardless of application state. These functions MAY be implemented using physical hardware keys,<br/>software, gestures, touch panel, etc., but they MUST be always accessible and not obscure or interfere<br/>with the available application display area (see Display above).<br/> 499 When these buttons are used, the corresponding key events MUST be generated and sent to the<br/>foreground application. If the event is not intercepted and sunk by the application then device<br/>implementation MUST handle the event as a system volume control.<br/> 500 <b>9. Performance Compatibility</b><br/> 501 One of the goals of the Android Compatibility Program is to ensure a consistent application experience for<br/>consumers. Compatible implementations must ensure not only that applications simply run correctly on<br/>the device, but that they do so with reasonable performance and overall good user experience.<br/> 502 Device implementations MUST meet the key performance metrics of an Android 1.6 compatible device,<br/>as in the table below:<br/> 503 <b>Metric</b><br/> 504 <b>Performance Threshold</b><br/> 505 <b>Comments</b><br/> 506 <hr/> 507 <a name=20></a>This is tested by CTS.<br/> 508 The following applications<br/> 509 The launch time is measured as the total time to<br/> 510 should launch within the<br/> 511 complete loading the default activity for the<br/> 512 Application<br/> 513 specified time.<br/> 514 application, including the time it takes to start the<br/> 515 Launch Time<br/> 516 Browser: less than 1300ms<br/> 517 Linux process, load the Android package into the<br/> 518 MMS/SMS: less than 700ms<br/> 519 Dalvik VM, and call onCreate.<br/> 520 AlarmClock: less than 650ms<br/> 521 Multiple applications will be<br/> 522 This is tested by CTS.<br/> 523 launched. Re-launching the<br/> 524 Simultaneous first application should<br/> 525 Applications<br/> 526 complete taking less than the<br/>original launch time.<br/> 527 <b>10. Security Model Compatibility</b><br/> 528 Device implementations MUST implement a security model consistent with the Android platform security<br/>model as defined in Security and Permissions reference document in the APIs <a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources, </a>29] in the<br/>Android developer documentation. Device implementations MUST support installation of self-signed<br/>applications without requiring any additional permissions/certificates from any third parties/authorities.<br/> 529 Specifically, compatible devices MUST support the following security mechanisms:<br/> 530 <b>10.1. Permissions</b><br/> 531 Device implementations MUST support the Android permissions model as defined in the Android<br/>developer documentation [<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources</a>, 9]. Specifically, implementations MUST enforce each permission<br/>defined as described in the SDK documentation; no permissions may be omitted, altered, or ignored.<br/>Implementations MAY add additional permissions, provided the new permission ID strings are not in the<br/>android.* namespace.<br/> 532 <b>10.2. User and Process Isolation</b><br/> 533 Device implementations MUST support the Android application sandbox model, in which each application<br/>runs as a unique Unix-style UID and in a separate process.<br/> 534 Device implementations MUST support running multiple applications as the same Linux user ID, provided<br/>that the applications are properly signed and constructed, as defined in the Security and Permissions<br/>reference [<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources</a>, 29].<br/> 535 <hr/> 536 <a name=21></a><b>10.3. Filesystem Permissions</b><br/> 537 Device implementations MUST support the Android file access permissions model as defined in as<br/>defined in the Security and Permissions reference <a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">[Resources</a>, 29].<br/> 538 <b>11. Compatibility Test Suite</b><br/> 539 Device implementations MUST pass the Android Compatibility Test Suite (CTS) [<a href="http://docs.google.com/a/google.com/Doc?docid=0ASeIKgIEGkvNZGc4OTRjZl80ZmgyZDhuY24&hl=en#resources">Resources, </a>3] available<br/>from the Android Open Source Project, using the final shipping software on the device. Additionally,<br/>device implementers SHOULD use the reference implementation in the Android Open Source tree as<br/>much as possible, and MUST ensure compatibility in cases of ambiguity in CTS and for any<br/>reimplementations of parts of the reference source code.<br/> 540 The CTS is designed to be run on an actual device. Like any software, the CTS may itself contain bugs.<br/>The CTS will be versioned independently of this Compatibility Definition, and multiple revisions of the<br/>CTS may be released for Android 1.6. However, such releases will only fix behavioral bugs in the CTS<br/>tests and will not impose any new tests, behaviors or APIs for a given platform release.<br/> 541 <b>12. Contact Us</b><br/> 542 You can contact the Android Compatibility Team at <a href="mailto:compatibility (a] android.com">compatibility (a] android.com </a>for clarifications related to<br/>this Compatibiltiy Definition and to provide feedback on this Definition.<br/> 543 <hr/> 544 <a name=22></a><b>Appendix A: Required Application Intents</b><br/> 545 <b>NOTE: this list is provisional, and will be updated in the future.</b><br/> 546 <b>Application Actions</b><br/> 547 <b>Schemes MIME Types</b><br/> 548 <b>(none)<br/>text/plain</b><br/> 549 <b>http</b><br/> 550 <b>text/html</b><br/> 551 <b>Browser</b><br/> 552 <b>android.intent.action.VIEW</b><br/> 553 <b>https</b><br/> 554 <b>application/xhtml+xml<br/>application/<br/>vnd.wap.xhtml+xml</b><br/> 555 <b>(none)</b><br/> 556 <b>android.intent.action.WEB_SEARCH</b><br/> 557 <b>http</b><br/> 558 <b>(none)</b><br/> 559 <b>https</b><br/> 560 <b>android.media.action.IMAGE_CAPTURE<br/>android.media.action.STILL_IMAGE_CAMERA</b><br/> 561 <b>Camera</b><br/> 562 <b>android.media.action.VIDEO_CAMERA<br/>android.media.action.VIDEO_CAPTURE</b><br/> 563 <b>vnd.android.cursor.dir/</b><br/> 564 <b>android.intent.action.VIEW</b><br/> 565 <b>image</b><br/> 566 <b>android.intent.action.GET_CONTENT</b><br/> 567 <b>vnd.android.cursor.dir/</b><br/> 568 <b>android.intent.action.PICK</b><br/> 569 <b>video</b><br/> 570 <b>android.intent.action.ATTACH_DATA</b><br/> 571 <b>image/*<br/>video/*</b><br/> 572 <b>android.intent.action.VIEW</b><br/> 573 <b>rtsp</b><br/> 574 <b>video/mp4<br/>video/3gp</b><br/> 575 <b>android.intent.action.VIEW</b><br/> 576 <b>http</b><br/> 577 <b>video/3gpp<br/>video/3gpp2</b><br/> 578 <b>android.intent.action.DIAL</b><br/> 579 <b>Phone /</b><br/> 580 <b>android.intent.action.VIEW</b><br/> 581 <b>tel</b><br/> 582 <b>Contacts</b><br/> 583 <b>android.intent.action.CALL</b><br/> 584 <b>android.intent.action.DIAL</b><br/> 585 <b>vnd.android.cursor.dir/</b><br/> 586 <b>android.intent.action.VIEW</b><br/> 587 <b>person</b><br/> 588 <hr/> 589 <a name=23></a><b>vnd.android.cursor.dir/<br/>person<br/>vnd.android.cursor.dir/</b><br/> 590 <b>android.intent.action.PICK</b><br/> 591 <b>phone<br/>vnd.android.cursor.dir/<br/>postal-address</b><br/> 592 <b>vnd.android.cursor.item/<br/>person<br/>vnd.android.cursor.item/</b><br/> 593 <b>android.intent.action.GET_CONTENT</b><br/> 594 <b>phone<br/>vnd.android.cursor.item/<br/>postal-address</b><br/> 595 <b>text/plain</b><br/> 596 <b>Email</b><br/> 597 <b>android.intent.action.SEND</b><br/> 598 <b>image/*<br/>video/*</b><br/> 599 <b>android.intent.action.VIEW</b><br/> 600 <b>mailto</b><br/> 601 <b>android.intent.action.SENDTO</b><br/> 602 <b>sms</b><br/> 603 <b>android.intent.action.VIEW</b><br/> 604 <b>smsto</b><br/> 605 <b>SMS / MMS android.intent.action.SENDTO</b><br/> 606 <b>mms<br/>mmsto</b><br/> 607 <b>audio/*<br/>application/ogg</b><br/> 608 <b>Music</b><br/> 609 <b>android.intent.action.VIEW</b><br/> 610 <b>file</b><br/> 611 <b>application/x-ogg<br/>application/itunes</b><br/> 612 <b>audio/mp3<br/>audio/x-mp3</b><br/> 613 <b>android.intent.action.VIEW</b><br/> 614 <b>http</b><br/> 615 <b>audio/mpeg<br/>audio/mp4<br/>audio/mp4a-latm</b><br/> 616 <b>vnd.android.cursor.dir/<br/>artistalbum<br/>vnd.android.cursor.dir/<br/>album<br/>vnd.android.cursor.dir/</b><br/> 617 <b>android.intent.action.PICK</b><br/> 618 <b>nowplaying<br/>vnd.android.cursor.dir/<br/>track<br/>nd.android.cursor.dir/<br/>playlist<br/>vnd.android.cursor.dir/<br/>video</b><br/> 619 <b>media/*<br/>audio/*</b><br/> 620 <b>android.intent.action.GET_CONTENT</b><br/> 621 <b>application/ogg<br/>application/x-ogg<br/>video/*</b><br/> 622 <hr/> 623 <a name=24></a><b>content</b><br/> 624 <b>Package</b><br/> 625 <b>android.intent.action.VIEW</b><br/> 626 <b>file</b><br/> 627 <b>Installer</b><br/> 628 <b>package</b><br/> 629 <b>file</b><br/> 630 <b>android.intent.action.PACKAGE_INSTALL</b><br/> 631 <b>http<br/>https</b><br/> 632 <b>android.intent.action.ALL_APPS</b><br/> 633 <b>android.settings.SETTINGS<br/>android.settings.WIRELESS_SETTINGS<br/>android.settings.AIRPLANE_MODE_SETTINGS<br/>android.settings.WIFI_SETTINGS<br/>android.settings.APN_SETTINGS<br/>android.settings.BLUETOOTH_SETTINGS<br/>android.settings.DATE_SETTINGS<br/>android.settings.LOCALE_SETTINGS</b><br/> 634 <b>Settings</b><br/> 635 <b>android.settings.INPUT_METHOD_SETTINGS<br/>com.android.settings.SOUND_SETTINGS<br/>com.android.settings.DISPLAY_SETTINGS<br/>android.settings.SECURITY_SETTING<br/>android.settings.LOCATION_SOURCE_SETTINGS<br/>android.settings.INTERNAL_STORAGE_SETTINGS<br/>android.settings.MEMORY_CARD_SETTINGS<br/>android.intent.action.SET_WALLPAPER</b><br/> 636 <b>Search</b><br/> 637 <b>android.intent.action.SEARCH</b><br/> 638 <b>query</b><br/> 639 <b>android.intent.action.SEARCH_LONG_PRESS</b><br/> 640 <b>Voice</b><br/> 641 <b>android.intent.action.VOICE_COMMAND</b><br/> 642 <b>Contacts Management</b><br/> 643 <b>Intent Action</b><br/> 644 <b>Description</b><br/> 645 <b>Starts an Activity that lets the user pick</b><br/> 646 <a href="http://developer.android.com/reference/android/provider/Contacts.Intents.html#ATTACH_IMAGE"><b>ATTACH_IMAGE</b></a><br/> 647 <b>a contact to attach an image to.</b><br/> 648 <b>Used</b><br/> 649 <a href="http://developer.android.com/reference/android/provider/Contacts.Intents.html#EXTRA_CREATE_DESCRIPTION"><b>EXTRA_CREATE_DESCRIPTION</b></a><br/> 650 <b>with <a href="http://developer.android.com/reference/android/provider/Contacts.Intents.html#SHOW_OR_CREATE_CONTACT">SHOW_OR_CREATE_CONTACT </a></b><b>to<br/>specify an exact description to be</b><br/> 651 <hr/> 652 <a name=25></a><b>shown when prompting user about<br/>creating a new contact.</b><br/> 653 <b>Used<br/>with <a href="http://developer.android.com/reference/android/provider/Contacts.Intents.html#SHOW_OR_CREATE_CONTACT">SHOW_OR_CREATE_CONTACT </a></b><b>to</b><br/> 654 <a href="http://developer.android.com/reference/android/provider/Contacts.Intents.html#EXTRA_FORCE_CREATE"><b>EXTRA_FORCE_CREATE</b></a><br/> 655 <b>force creating a new contact if no<br/>matching contact found.</b><br/> 656 <b>This is the intent that is fired when a</b><br/> 657 <a href="http://developer.android.com/reference/android/provider/Contacts.Intents.html#SEARCH_SUGGESTION_CLICKED"><b>SEARCH_SUGGESTION_CLICKED</b></a><br/> 658 <b>search suggestion is clicked on.</b><br/> 659 <b>This is the intent that is fired when a</b><br/> 660 <a href="http://developer.android.com/reference/android/provider/Contacts.Intents.html#SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED"><b>SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED </b></a><b>search suggestion for creating a</b><br/> 661 <b>contact is clicked on.</b><br/> 662 <b>This is the intent that is fired when a</b><br/> 663 <a href="http://developer.android.com/reference/android/provider/Contacts.Intents.html#SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED"><b>SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED</b></a><br/> 664 <b>search suggestion for dialing a number<br/>is clicked on.</b><br/> 665 <b>Takes as input a data URI with a mailto:</b><br/> 666 <a href="http://developer.android.com/reference/android/provider/Contacts.Intents.html#SHOW_OR_CREATE_CONTACT"><b>SHOW_OR_CREATE_CONTACT</b></a><br/> 667 <b>or tel: scheme.</b><br/> 668 <hr/> 669 <a name=26></a>Appendix B: Required Broadcast Intents<b>NOTE: this list is provisional, and will be<br/>updated in the future.</b><br/> 670 Intent Action<br/> 671 Description<br/> 672 Broadcast Action: This is broadcast once, after the<br/> 673 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_BOOT_COMPLETED">ACTION_BOOT_COMPLETED</a><br/> 674 system has finished booting.<br/> 675 Broadcast Action: This is broadcast once, when a<br/> 676 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_CALL_BUTTON">ACTION_CALL_BUTTON</a><br/> 677 call is received.<br/> 678 Broadcast Action: The "Camera Button" was<br/> 679 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_CAMERA_BUTTON">ACTION_CAMERA_BUTTON</a><br/> 680 pressed.<br/> 681 Broadcast Action: The current<br/> 682 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_CONFIGURATION_CHANGED">ACTION_CONFIGURATION_CHANGED</a><br/> 683 device <a href="http://developer.android.com/reference/android/content/res/Configuration.html">Configuration </a>(orientation, locale, etc) has<br/>changed.<br/> 684 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_DATE_CHANGED">ACTION_DATE_CHANGED</a><br/> 685 Broadcast Action: The date has changed.<br/> 686 Broadcast Action: Indicates low memory condition<br/> 687 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_DEVICE_STORAGE_LOW">ACTION_DEVICE_STORAGE_LOW</a><br/> 688 on the device<br/> 689 Broadcast Action: Indicates low memory condition<br/> 690 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_DEVICE_STORAGE_OK">ACTION_DEVICE_STORAGE_OK</a><br/> 691 on the device no longer exists<br/> 692 Broadcast Action: Wired Headset plugged in or<br/> 693 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_HEADSET_PLUG">ACTION_HEADSET_PLUG</a><br/> 694 unplugged.<br/> 695 Broadcast Action: An input method has been<br/> 696 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_INPUT_METHOD_CHANGED">ACTION_INPUT_METHOD_CHANGED</a><br/> 697 changed.<br/> 698 Broadcast Action: External media was removed<br/> 699 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_BAD_REMOVAL">ACTION_MEDIA_BAD_REMOVAL</a><br/> 700 from SD card slot, but mount point was not<br/>unmounted.<br/> 701 Broadcast Action: The "Media Button" was<br/> 702 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_BUTTON">ACTION_MEDIA_BUTTON</a><br/> 703 pressed.<br/> 704 Broadcast Action: External media is present, and<br/>being disk-checked The path to the mount point for<br/> 705 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_CHECKING">ACTION_MEDIA_CHECKING</a><br/> 706 the checking media is contained in the<br/>Intent.mData field.<br/> 707 Broadcast Action: User has expressed the desire to<br/> 708 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_EJECT">ACTION_MEDIA_EJECT</a><br/> 709 remove the external storage media.<br/> 710 Broadcast Action: External media is present and<br/> 711 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_MOUNTED">ACTION_MEDIA_MOUNTED</a><br/> 712 mounted at its mount point.<br/> 713 Broadcast Action: External media is present, but is<br/>using an incompatible fs (or is blank) The path to<br/> 714 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_NOFS">ACTION_MEDIA_NOFS</a><br/> 715 the mount point for the checking media is<br/>contained in the Intent.mData field.<br/> 716 Broadcast Action: External media has been<br/> 717 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_REMOVED">ACTION_MEDIA_REMOVED</a><br/> 718 removed.<br/> 719 Broadcast Action: The media scanner has finished<br/> 720 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_SCANNER_FINISHED">ACTION_MEDIA_SCANNER_FINISHED</a><br/> 721 scanning a directory.<br/> 722 Broadcast Action: Request the media scanner to<br/> 723 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_SCANNER_SCAN_FILE">ACTION_MEDIA_SCANNER_SCAN_FILE</a><br/> 724 scan a file and add it to the media database.<br/> 725 <hr/> 726 <a name=27></a>Broadcast Action: The media scanner has started<br/> 727 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_SCANNER_STARTED">ACTION_MEDIA_SCANNER_STARTED</a><br/> 728 scanning a directory.<br/> 729 Broadcast Action: External media is unmounted<br/> 730 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_SHARED">ACTION_MEDIA_SHARED</a><br/> 731 because it is being shared via USB mass storage.<br/> 732 Broadcast Action: External media is present but<br/> 733 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_UNMOUNTABLE">ACTION_MEDIA_UNMOUNTABLE</a><br/> 734 cannot be mounted.<br/> 735 Broadcast Action: External media is present, but<br/> 736 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_MEDIA_UNMOUNTED">ACTION_MEDIA_UNMOUNTED</a><br/> 737 not mounted at its mount point.<br/> 738 Broadcast Action: An outgoing call is about to be<br/> 739 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_NEW_OUTGOING_CALL">ACTION_NEW_OUTGOING_CALL</a><br/> 740 placed.<br/> 741 Broadcast Action: A new application package has<br/> 742 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_ADDED">ACTION_PACKAGE_ADDED</a><br/> 743 been installed on the device.<br/> 744 Broadcast Action: An existing application package<br/> 745 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_CHANGED">ACTION_PACKAGE_CHANGED</a><br/> 746 has been changed (e.g. a component has been<br/>enabled or disabled.<br/> 747 Broadcast Action: The user has cleared the data of<br/>a package. This should be preceded<br/>by <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_RESTARTED">ACTION_PACKAGE_RESTARTED, after which</a><br/> 748 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_DATA_CLEARED">ACTION_PACKAGE_DATA_CLEARED</a><br/> 749 all of its persistent data is erased and this<br/>broadcast sent. Note that the cleared package<br/>does <i>not </i>receive this broadcast. The data contains<br/>the name of the package.<br/> 750 Broadcast Action: An existing application package<br/>has been removed from the device. The data<br/> 751 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_REMOVED">ACTION_PACKAGE_REMOVED</a><br/> 752 contains the name of the package. The package<br/>that is being installed does <i>not </i>receive this Intent.<br/> 753 Broadcast Action: A new version of an application<br/> 754 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_REPLACED">ACTION_PACKAGE_REPLACED</a><br/> 755 package has been installed, replacing an existing<br/>version that was previously installed.<br/> 756 Broadcast Action: The user has restarted a<br/>package, and all of its processes have been killed.<br/>All runtime state associated with it (processes,<br/> 757 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_RESTARTED">ACTION_PACKAGE_RESTARTED</a><br/> 758 alarms, notifications, etc) should be removed. Note<br/>that the restarted package does <i>not </i>receive this<br/>broadcast. The data contains the name of the<br/>package.<br/> 759 Broadcast Action: Some content providers have<br/>parts of their namespace where they publish new<br/> 760 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_PROVIDER_CHANGED">ACTION_PROVIDER_CHANGED</a><br/> 761 events or items that the user may be especially<br/>interested in.<br/> 762 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_SCREEN_OFF">ACTION_SCREEN_OFF</a><br/> 763 Broadcast Action: Sent after the screen turns off.<br/> 764 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_SCREEN_ON">ACTION_SCREEN_ON</a><br/> 765 Broadcast Action: Sent after the screen turns on.<br/> 766 Broadcast Action: A user ID has been removed<br/> 767 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_UID_REMOVED">ACTION_UID_REMOVED</a><br/> 768 from the system.<br/> 769 Broadcast Action: The device has entered USB<br/> 770 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_UMS_CONNECTED">ACTION_UMS_CONNECTED</a><br/> 771 Mass Storage mode.<br/> 772 <hr/> 773 <a name=28></a>Broadcast Action: The device has exited USB<br/> 774 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_UMS_DISCONNECTED">ACTION_UMS_DISCONNECTED</a><br/> 775 Mass Storage mode.<br/> 776 Broadcast Action: Sent when the user is present<br/> 777 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_USER_PRESENT">ACTION_USER_PRESENT</a><br/> 778 after device wakes up (e.g when the keyguard is<br/>gone).<br/> 779 Broadcast Action: The current system wallpaper<br/> 780 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_WALLPAPER_CHANGED">ACTION_WALLPAPER_CHANGED</a><br/> 781 has changed.<br/> 782 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_TIME_CHANGED">ACTION_TIME_CHANGED</a><br/> 783 Broadcast Action: The time was set.<br/> 784 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_TIME_TICK">ACTION_TIME_TICK</a><br/> 785 Broadcast Action: The current time has changed.<br/> 786 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_TIMEZONE_CHANGED">ACTION_TIMEZONE_CHANGED</a><br/> 787 Broadcast Action: The timezone has changed.<br/> 788 Broadcast Action: The charging state, or charge<br/> 789 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_BATTERY_CHANGED">ACTION_BATTERY_CHANGED</a><br/> 790 level of the battery has changed.<br/> 791 Broadcast Action: Indicates low battery condition<br/> 792 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_BATTERY_LOW">ACTION_BATTERY_LOW</a><br/> 793 on the device. This broadcast corresponds to the<br/>"Low battery warning" system dialog.<br/> 794 Broadcast Action: Indicates the battery is now okay<br/>after being low. This will be sent<br/> 795 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_BATTERY_OKAY">ACTION_BATTERY_OKAY</a><br/> 796 after <a href="/tmp/1266564852215-0/../../reference/android/content/Intent.html#ACTION_BATTERY_LOW">ACTION_BATTERY_LOW </a>once the battery<br/>has gone back up to an okay state.<br/> 797 <b>Network State</b><br/> 798 Intent Action<br/> 799 Description<br/> 800 Broadcast intent action indicating that the<br/> 801 <a href="http://developer.android.com/reference/android/net/wifi/WifiManager.html#NETWORK_STATE_CHANGED_ACTION">NETWORK_STATE_CHANGED_ACTION</a><br/> 802 state of Wi-Fi connectivity has changed.<br/> 803 Broadcast intent action indicating that the<br/> 804 <a href="http://developer.android.com/reference/android/net/wifi/WifiManager.html#RSSI_CHANGED_ACTION">RSSI_CHANGED_ACTION</a><br/> 805 RSSI (signal strength) has changed.<br/> 806 Broadcast intent action indicating that a<br/> 807 <a href="http://developer.android.com/reference/android/net/wifi/WifiManager.html#SUPPLICANT_STATE_CHANGED_ACTION">SUPPLICANT_STATE_CHANGED_ACTION</a><br/> 808 connection to the supplicant has been<br/>established or lost.<br/> 809 Broadcast intent action indicating that Wi-Fi<br/> 810 <a href="http://developer.android.com/reference/android/net/wifi/WifiManager.html#WIFI_STATE_CHANGED_ACTION">WIFI_STATE_CHANGED_ACTION</a><br/> 811 has been enabled, disabled, enabling,<br/>disabling, or unknown.<br/> 812 The network IDs of the configured networks<br/> 813 <a href="http://developer.android.com/reference/android/net/wifi/WifiManager.html#NETWORK_IDS_CHANGED_ACTION">NETWORK_IDS_CHANGED_ACTION</a><br/> 814 could have changed.<br/> 815 Broadcast intent action indicating that the<br/> 816 <a href="http://developer.android.com/reference/android/net/ConnectivityManager.html#ACTION_BACKGROUND_DATA_SETTING_CHANGED">ACTION_BACKGROUND_DATA_SETTING_CHANGED </a>setting for background data usage has<br/> 817 changed values.<br/> 818 Broadcast intent indicating that a change in<br/> 819 <a href="http://developer.android.com/reference/android/net/ConnectivityManager.html#CONNECTIVITY_ACTION">CONNECTIVITY_ACTION</a><br/> 820 network connectivity has occurred.<br/> 821 Broadcast Action: The user has switched the<br/> 822 <a href="http://developer.android.com/reference/android/content/Intent.html#ACTION_AIRPLANE_MODE_CHANGED">ACTION_AIRPLANE_MODE_CHANGED</a><br/> 823 phone into or out of Airplane Mode.<br/> 824 <hr/> 825 <a name=29></a><hr/> 826 <a name=30></a>Appendix C: Future Considerations This appendix clarifies certain portions of this Android<br/>1.6 Compatibility Definition, and in some cases discusses anticipated or planned changes intended for a<br/>future version of the Android platform. This appendix is for informational and planning purposes only, and<br/>is not part of the Compatibility Definition for Android 1.6.<br/> 827 <b>1. Non-telephone Devices</b><br/> 828 Android 1.6 is intended exclusively for telephones; telephony functionality is not optional. Future versions<br/>of the Android platform are expected to make telephony optional (and thus allow for non-phone Android<br/>devices), but only phones are compatible with Android 1.6.<br/> 829 <b>2. Bluetooth Compatibility</b><br/> 830 The Android 1.6 release of Android does not support Bluetooth APIs, so from a compatibility perspective<br/>Bluetooth does not impose any considerations for this version of the platform. However, a future version<br/>of Android will introduce Bluetooth APIs. At that point, supporting Bluetooth will become mandatory for<br/>compatibility.<br/> 831 Consequently, we strongly recommend that Android 1.6 devices include Bluetooth, so that they will be<br/>compatible with future versions of Android that require Bluetooth.<br/> 832 <b>3. Required Hardware Components</b><br/> 833 All hardware components in Section 8 (including WiFi, magnetometer/compass, accelerometer, etc.) are<br/>required and may not be omitted. Future versions of Android are expected to make some (but not all) of<br/>these components optional, in tandem with corresponding tools for third-party developers to handle these<br/>changes.<br/> 834 <b>4. Sample Applications</b><br/> 835 The Compatibility Definition Document for a future version of Android will include a more extensive and<br/>representative list of applications than the ones listed in Section 4, above. For Android 1.6, the<br/>applications listed in Section 4 must be tested.<br/> 836 <b>5. Touch Screens</b><br/> 837 Future versions of the Compatibility Definition may or may not allow for devices to omit touchscreens.<br/>However, currently much of the Android framework implementation assumes the existence of a<br/>touchscreen; omitting a touchscreen would break substantially all current third-party Android applications,<br/>so in Android 1.6 a touchscreen is required for compatibility.<br/> 838 <hr/> 839 <a name=31></a><b>6. Performance</b><br/> 840 Future versions of CTS will also measure the CPU utilization and performance of the following<br/>components of an implementation:<br/> 841  2D graphics<br/> 3D graphics<br/> Video playback<br/> Audio playback<br/> Bluetooth A2DP playback<br/> 842 <hr/> 843 <a name="outline"></a><h1>Document Outline</h1> 844 <ul> 845 <li><a href="android-1.6-cdd.html#4">1. Introduction</a></li> 846 <li><a href="android-1.6-cdd.html#4">2. Resources</a></li> 847 <li><a href="android-1.6-cdd.html#5">3. Software</a> 848 <ul> 849 <li><a href="android-1.6-cdd.html#5">3.1. Managed API Compatibility</a></li> 850 <li><a href="android-1.6-cdd.html#6">3.2. Soft API Compatibility</a> 851 <ul> 852 <li><a href="android-1.6-cdd.html#6">3.2.1. Permissions</a></li> 853 <li><a href="android-1.6-cdd.html#6">3.2.2. Build Parameters</a></li> 854 <li><a href="android-1.6-cdd.html#8">3.2.3. Intent Compatibility</a> 855 <ul> 856 <li><a href="android-1.6-cdd.html#8">3.2.3.1. Core Application Intents</a></li> 857 <li><a href="android-1.6-cdd.html#8">3.2.3.2. Intent Overrides</a></li> 858 <li><a href="android-1.6-cdd.html#8">3.2.3.3. Intent Namespaces</a></li> 859 <li><a href="android-1.6-cdd.html#9">3.2.3.4. Broadcast Intents</a></li> 860 </ul> 861 </li> 862 </ul> 863 </li> 864 <li><a href="android-1.6-cdd.html#9">3.3. Native API Compatibility</a></li> 865 <li><a href="android-1.6-cdd.html#9">3.4. Web API Compatibility</a></li> 866 <li><a href="android-1.6-cdd.html#10">3.5. API Behavioral Compatibility</a></li> 867 <li><a href="android-1.6-cdd.html#10">3.6. API Namespaces</a></li> 868 <li><a href="android-1.6-cdd.html#11">3.7. Virtual Machine Compatibility</a></li> 869 <li><a href="android-1.6-cdd.html#11">3.8. User Interface Compatibility</a> 870 <ul> 871 <li><a href="android-1.6-cdd.html#11">3.8.1. Widgets</a></li> 872 <li><a href="android-1.6-cdd.html#12">3.8.2. Notifications</a></li> 873 <li><a href="android-1.6-cdd.html#12">3.8.3. Search</a></li> 874 <li><a href="android-1.6-cdd.html#12">3.8.4. Toasts</a></li> 875 </ul> 876 </li> 877 </ul> 878 </li> 879 <li><a href="android-1.6-cdd.html#12">4. Reference Software Compatibility</a></li> 880 <li><a href="android-1.6-cdd.html#13">5. Application Packaging Compatibility</a></li> 881 <li><a href="android-1.6-cdd.html#13">6. Multimedia Compatibility</a></li> 882 <li><a href="android-1.6-cdd.html#14">7. Developer Tool Compatibility</a></li> 883 <li><a href="android-1.6-cdd.html#15">8. Hardware Compatibility</a> 884 <ul> 885 <li><a href="android-1.6-cdd.html#15">8.1. Display</a> 886 <ul> 887 <li><a href="android-1.6-cdd.html#15">8.1.1. Standard Display Configurations</a></li> 888 <li><a href="android-1.6-cdd.html#16">8.1.2. Non-Standard Display Configurations</a></li> 889 <li><a href="android-1.6-cdd.html#16">8.1.3. Display Metrics</a></li> 890 </ul> 891 </li> 892 <li><a href="android-1.6-cdd.html#16">8.2. Keyboard</a></li> 893 <li><a href="android-1.6-cdd.html#16">8.3. Non-touch Navigation</a></li> 894 <li><a href="android-1.6-cdd.html#17">8.4. Screen Orientation</a></li> 895 <li><a href="android-1.6-cdd.html#17">8.5. Touchscreen input</a></li> 896 <li><a href="android-1.6-cdd.html#17">8.6. USB</a></li> 897 <li><a href="android-1.6-cdd.html#17">8.7. Navigation keys</a></li> 898 <li><a href="android-1.6-cdd.html#17">8.8. WiFi</a></li> 899 <li><a href="android-1.6-cdd.html#18">8.9. Camera</a> 900 <ul> 901 <li><a href="android-1.6-cdd.html#18">8.9.1. Non-Autofocus Cameras</a></li> 902 </ul> 903 </li> 904 <li><a href="android-1.6-cdd.html#18">8.10. Accelerometer</a></li> 905 <li><a href="android-1.6-cdd.html#19">8.11. Compass</a></li> 906 <li><a href="android-1.6-cdd.html#19">8.12. GPS</a></li> 907 <li><a href="android-1.6-cdd.html#19">8.13. Telephony</a></li> 908 <li><a href="android-1.6-cdd.html#19">8.14. Volume controls</a></li> 909 </ul> 910 </li> 911 <li><a href="android-1.6-cdd.html#19">9. Performance Compatibility</a></li> 912 <li><a href="android-1.6-cdd.html#20">10. Security Model Compatibility</a> 913 <ul> 914 <li><a href="android-1.6-cdd.html#20">10.1. Permissions</a></li> 915 <li><a href="android-1.6-cdd.html#20">10.2. User and Process Isolation</a></li> 916 <li><a href="android-1.6-cdd.html#21">10.3. Filesystem Permissions</a></li> 917 </ul> 918 </li> 919 <li><a href="android-1.6-cdd.html#21">11. Compatibility Test Suite</a></li> 920 <li><a href="android-1.6-cdd.html#21">12. Contact Us</a></li> 921 <li><a href="android-1.6-cdd.html#22">Appendix A: Required Application Intents</a> 922 <ul> 923 <li><a href="android-1.6-cdd.html#30">1. Non-telephone Devices</a></li> 924 <li><a href="android-1.6-cdd.html#30">2. Bluetooth Compatibility</a></li> 925 <li><a href="android-1.6-cdd.html#30">3. Required Hardware Components</a></li> 926 <li><a href="android-1.6-cdd.html#30">4. Sample Applications</a></li> 927 <li><a href="android-1.6-cdd.html#30">5. Touch Screens</a></li> 928 <li><a href="android-1.6-cdd.html#31">6. Performance</a></li> 929 </ul> 930 </li> 931 </ul> 932 <hr/> 933 </body> 934 </html> 935