* commit '46bda6a4838e592fd3cc0d9334ae92cdc7434f3e': docs: Fixed typo (spurious quotation mark).
1124 lines
47 KiB
Plaintext
1124 lines
47 KiB
Plaintext
page.title=<uses-feature>
|
|
page.tags=filtering,features,google play filters,permissions
|
|
@jd:body
|
|
|
|
<div id="qv-wrapper">
|
|
<div id="qv">
|
|
|
|
|
|
<h2>In this document</h2>
|
|
<ol>
|
|
<li><a href="#market-feature-filtering">Google Play and Feature-Based Filtering</a>
|
|
<ol>
|
|
<li><a href="#declared">Filtering based on explicitly declared features</a></li>
|
|
<li><a href="#implicit">Filtering based on implicit features</a></li>
|
|
<li><a href="#bt-permission-handling">Special handling for Bluetooth feature</a></li>
|
|
<li><a href="#testing">Testing the features required by your application</a></li>
|
|
</ol>
|
|
</li>
|
|
<li><a href="#features-reference">Features Reference</a>
|
|
<ol>
|
|
<li><a href="#hw-features">Hardware features</a></li>
|
|
<li><a href="#sw-features">Software features</a></li>
|
|
<li><a href="#permissions">Permissions that Imply Feature Requirements</a></li>
|
|
</ol>
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="sidebox-wrapper">
|
|
<div class="sidebox">
|
|
<img src="{@docRoot}assets/images/icon_play.png" style="float:left;margin:0;padding:0;">
|
|
<p style="color:#669999;padding-top:1em;">Google Play Filtering</p>
|
|
<p style="padding-top:1em;">Google Play uses the <code><uses-feature></code>
|
|
elements declared in your app manifest to filter your app from devices
|
|
that do not meet it's hardware and software feature requirements. </p>
|
|
|
|
<p style="margin-top:1em;">By specifying the features that your application requires,
|
|
you enable Google Play to present your application only to users whose
|
|
devices meet the application's feature requirements, rather than presenting it
|
|
to all users. </p>
|
|
|
|
<p>For important information about how
|
|
Google Play uses features as the basis for filtering, please read <a
|
|
href="#market-feature-filtering">Google Play and Feature-Based Filtering</a>,
|
|
below.</p>
|
|
</div>
|
|
</div>
|
|
|
|
<dl class="xml">
|
|
|
|
<dt>syntax:</dt>
|
|
<dd>
|
|
<pre class="stx"><uses-feature
|
|
android:<a href="#name">name</a>="<em>string</em>"
|
|
android:<a href="#required">required</a>=["true" | "false"]
|
|
android:<a href="#glEsVersion">glEsVersion</a>="<em>integer</em>" /></pre>
|
|
</dd>
|
|
|
|
<dt>contained in:</dt>
|
|
<dd><code><a
|
|
href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code></dd>
|
|
|
|
<dt>description:</dt>
|
|
<dd itemprop="description">Declares a single hardware or software feature that is used by the
|
|
application.
|
|
|
|
<p>The purpose of a <code><uses-feature></code> declaration is to inform
|
|
any external entity of the set of hardware and software features on which your
|
|
application depends. The element offers a <code>required</code> attribute that
|
|
lets you specify whether your application requires and cannot function without
|
|
the declared feature, or whether it prefers to have the feature but can function
|
|
without it. Because feature support can vary across Android devices, the
|
|
<code><uses-feature></code> element serves an important role in letting an
|
|
application describe the device-variable features that it uses.</p>
|
|
|
|
<p>The set of available features that your application declares corresponds to
|
|
the set of feature constants made available by the Android {@link
|
|
android.content.pm.PackageManager}, which are listed for
|
|
convenience in the <a href="#features-reference">Features Reference</a> tables
|
|
at the bottom of this document.
|
|
|
|
<p>You must specify each feature in a separate <code><uses-feature></code>
|
|
element, so if your application requires multiple features, it would declare
|
|
multiple <code><uses-feature></code> elements. For example, an application
|
|
that requires both Bluetooth and camera features in the device would declare
|
|
these two elements:</p>
|
|
|
|
<pre>
|
|
<uses-feature android:name="android.hardware.bluetooth" />
|
|
<uses-feature android:name="android.hardware.camera" />
|
|
</pre>
|
|
|
|
<p>In general, you should always make sure to declare
|
|
<code><uses-feature></code> elements for all of the features that your
|
|
application requires.</p>
|
|
|
|
<p>Declared <code><uses-feature></code> elements are informational only, meaning
|
|
that the Android system itself does not check for matching feature support on
|
|
the device before installing an application. However, other services
|
|
(such as Google Play) or applications may check your application's
|
|
<code><uses-feature></code> declarations as part of handling or interacting
|
|
with your application. For this reason, it's very important that you declare all of
|
|
the features (from the list below) that your application uses. </p>
|
|
|
|
<p>For some features, there may exist a specific attribute that allows you to define
|
|
a version of the feature, such as the version of Open GL used (declared with
|
|
<a href="#glEsVersion"><code>glEsVersion</code></a>). Other features that either do or do not
|
|
exist for a device, such as a camera, are declared using the
|
|
<a href="#name"><code>name</code></a> attribute.</p>
|
|
|
|
|
|
<p>Although the <code><uses-feature></code> element is only activated for
|
|
devices running API Level 4 or higher, it is recommended to include these
|
|
elements for all applications, even if the <a href="uses-sdk-element.html#min"><code>minSdkVersion</code></a>
|
|
is "3" or lower. Devices running older versions of the platform will simply
|
|
ignore the element.</p>
|
|
|
|
<p class="note"><strong>Note:</strong> When declaring a feature, remember
|
|
that you must also request permissions as appropriate. For example, you must
|
|
still request the {@link android.Manifest.permission#CAMERA}
|
|
permission before your application can access the camera API. Requesting the
|
|
permission grants your application access to the appropriate hardware and
|
|
software, while declaring the features used by your application ensures proper
|
|
device compatibility.</p>
|
|
|
|
</dd>
|
|
|
|
|
|
<dt>attributes:</dt>
|
|
|
|
<dd>
|
|
<dl class="attr">
|
|
|
|
<dt><a name="name"></a><code>android:name</code></dt>
|
|
<dd>Specifies a single hardware or software feature used by the application,
|
|
as a descriptor string. Valid descriptor values are listed in the <a
|
|
href="#hw-features">Hardware features</a> and <a href="#sw-features">Software
|
|
features</a> tables, below. Descriptor string values are case-sensitive.</dd>
|
|
|
|
<dt><a name="required"></a><code>android:required</code></dt> <!-- added in api level 5 -->
|
|
<dd>Boolean value that indicates whether the application requires
|
|
the feature specified in <code>android:name</code>.
|
|
|
|
<ul>
|
|
<li>When you declare <code>android:required="true"</code> for a feature,
|
|
you are specifying that the application <em>cannot function, or is not
|
|
designed to function</em>, when the specified feature is not present on the
|
|
device. </li>
|
|
|
|
<li>When you declare <code>android:required="false"</code> for a feature, it
|
|
means that the application <em>prefers to use the feature</em> if present on
|
|
the device, but that it <em>is designed to function without the specified
|
|
feature</em>, if necessary. </li>
|
|
|
|
</ul>
|
|
|
|
<p>The default value for <code>android:required</code> if not declared is
|
|
<code>"true"</code>.</p>
|
|
</dd>
|
|
|
|
<dt><a name="glEsVersion"></a><code>android:glEsVersion</code></dt>
|
|
<dd>The OpenGL ES version required by the application. The higher 16 bits
|
|
represent the major number and the lower 16 bits represent the minor number. For
|
|
example, to specify OpenGL ES version 2.0, you would set the value as
|
|
"0x00020000", or to specify OpenGL ES 3.0, you would set the value as "0x00030000".
|
|
|
|
<p>An application should specify at most one <code>android:glEsVersion</code>
|
|
attribute in its manifest. If it specifies more than one, the
|
|
<code>android:glEsVersion</code> with the numerically highest value is used and
|
|
any other values are ignored.</p>
|
|
|
|
<p>If an application does not specify an <code>android:glEsVersion</code>
|
|
attribute, then it is assumed that the application requires only OpenGL ES 1.0,
|
|
which is supported by all Android-powered devices.</p>
|
|
|
|
<p>An application can assume that if a platform supports a given OpenGL ES
|
|
version, it also supports all numerically lower OpenGL ES versions. Therefore,
|
|
an application that requires both OpenGL ES 1.0 and OpenGL ES 2.0 must specify
|
|
that it requires OpenGL ES 2.0.</p>
|
|
|
|
<p>An application that can work with any of several OpenGL ES versions should
|
|
only specify the numerically lowest version of OpenGL ES that it requires. (It
|
|
can check at run-time whether a higher level of OpenGL ES is available.)</p>
|
|
|
|
<p>For more information about using OpenGL ES, including how to check the supported OpenGL ES
|
|
version at runtime, see the <a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL ES</a>
|
|
API guide.</p>
|
|
</dd>
|
|
|
|
</dl>
|
|
</dd>
|
|
|
|
<!-- ##api level indication## -->
|
|
<dt>introduced in:</dt>
|
|
<dd>API Level 4</dd>
|
|
|
|
<dt>see also:</dt>
|
|
<dd>
|
|
<ul>
|
|
<li>{@link android.content.pm.PackageManager}</li>
|
|
<li>{@link android.content.pm.FeatureInfo}</li>
|
|
<li>{@link android.content.pm.ConfigurationInfo}</li>
|
|
<li><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><code><uses-permission></code></a></li>
|
|
<li><a href="{@docRoot}google/play/filters.html">Filters on Google Play</a></li>
|
|
</ul>
|
|
</dd>
|
|
|
|
</dl>
|
|
|
|
|
|
<h2 id="market-feature-filtering">Google Play and Feature-Based Filtering</h2>
|
|
|
|
<p>Google Play filters the applications that are visible to users, so that
|
|
users can see and download only those applications that are compatible with
|
|
their devices. One of the ways it filters applications is by feature
|
|
compatibility.</p>
|
|
|
|
<p>To determine an application's feature compatibility with a given user's
|
|
device, Google Play compares:</p>
|
|
|
|
<ul>
|
|
<li>Features required by the application — an application declares features in
|
|
<code><uses-feature></code> elements in its manifest <br/>with...</li>
|
|
<li>Features available on the device, in hardware or software —
|
|
a device reports the features it supports as read-only system properties.</li>
|
|
</ul>
|
|
|
|
<p>To ensure an accurate comparison of features, the Android Package Manager
|
|
provides a shared set of feature constants that both applications and devices
|
|
use to declare feature requirements and support. The available feature constants
|
|
are listed in the <a href="#features-reference">Features Reference</a> tables at
|
|
the bottom of this document, and in the class documentation for {@link
|
|
android.content.pm.PackageManager}.</p>
|
|
|
|
<p>When the user launches Google Play, the application queries the
|
|
Package Manager for the list of features available on the device by calling
|
|
{@link android.content.pm.PackageManager#getSystemAvailableFeatures()}. The
|
|
Store application then passes the features list up to Google Play
|
|
when establishing the session for the user.</p>
|
|
|
|
<p>Each time you upload an application to the Google Play Developer Console,
|
|
Google Play scans the application's manifest file. It looks for
|
|
<code><uses-feature></code> elements and evaluates them in combination
|
|
with other elements, in some cases, such as <code><uses-sdk></code> and
|
|
<code><uses-permission></code> elements. After establishing the
|
|
application's set of required features, it stores that list internally as
|
|
metadata associated with the application <code>.apk</code> and the application
|
|
version. </p>
|
|
|
|
<p>When a user searches or browses for applications using the Google Play
|
|
application, the service compares the features needed by each application with
|
|
the features available on the user's device. If all of an application's required
|
|
features are present on the device, Google Play allows the user to see the
|
|
application and potentially download it. If any required feature is not
|
|
supported by the device, Google Play filters the application so that it is
|
|
not visible to the user and not available for download. </p>
|
|
|
|
<p>Because the features you declare in <code><uses-feature></code>
|
|
elements directly affect how Google Play filters your application, it's
|
|
important to understand how Google Play evaluates the application's manifest
|
|
and establishes the set of required features. The sections below provide more
|
|
information. </p>
|
|
|
|
<h3 id="declared">Filtering based on explicitly declared features</h3>
|
|
|
|
<p>An explicitly declared feature is one that your application declares in a
|
|
<code><uses-feature></code> element. The feature declaration can include
|
|
an <code>android:required=["true" | "false"]</code> attribute (if you are
|
|
compiling against API level 5 or higher), which lets you specify whether the
|
|
application absolutely requires the feature and cannot function properly without
|
|
it (<code>"true"</code>), or whether the application prefers to use the feature
|
|
if available, but is designed to run without it (<code>"false"</code>).</p>
|
|
|
|
<p>Google Play handles explicitly declared features in this way: </p>
|
|
|
|
<ul>
|
|
<li>If a feature is explicitly declared as being required, Google Play adds
|
|
the feature to the list of required features for the application. It then
|
|
filters the application from users on devices that do not provide that feature.
|
|
For example:
|
|
<pre><uses-feature android:name="android.hardware.camera" android:required="true" /></pre></li>
|
|
<li>If a feature is explicitly declared as <em>not</em> being required, Google
|
|
Play <em>does not</em> add the feature to the list of required features. For
|
|
that reason, an explicitly declared non-required feature is never considered when
|
|
filtering the application. Even if the device does not provide the declared
|
|
feature, Google Play will still consider the application compatible with the
|
|
device and will show it to the user, unless other filtering rules apply. For
|
|
example:
|
|
<pre><uses-feature android:name="android.hardware.camera" android:required="false" /></pre></li>
|
|
<li>If a feature is explicitly declared, but without an
|
|
<code>android:required</code> attribute, Google Play assumes that the feature
|
|
is required and sets up filtering on it. </li>
|
|
</ul>
|
|
|
|
<p>In general, if your application is designed to run on Android 1.6 and earlier
|
|
versions, the <code>android:required</code> attribute is not available in the
|
|
API and Google Play assumes that any and all
|
|
<code><uses-feature></code> declarations are required. </p>
|
|
|
|
<p class="note"><strong>Note:</strong> By declaring a feature explicitly and
|
|
including an <code>android:required="false"</code> attribute, you can
|
|
effectively disable all filtering on Google Play for the specified feature.
|
|
</p>
|
|
|
|
|
|
<h3 id="implicit">Filtering based on implicit features</h3>
|
|
|
|
<p>An <em>implicit</em> feature is one that an application requires in order to
|
|
function properly, but which is <em>not</em> declared in a
|
|
<code><uses-feature></code> element in the manifest file. Strictly
|
|
speaking, every application should <em>always</em> declare all features that it
|
|
uses or requires, so the absence of a declaration for a feature used by an
|
|
application should be considered an error. However, as a safeguard for users and
|
|
developers, Google Play looks for implicit features in each application and
|
|
sets up filters for those features, just as it would do for an explicitly
|
|
declared feature. </p>
|
|
|
|
<p>An application might require a feature but not declare it because: </p>
|
|
|
|
<ul>
|
|
<li>The application was compiled against an older version of the Android library
|
|
(Android 1.5 or earlier) and the <code><uses-feature></code> element was
|
|
not available.</li>
|
|
<li>The developer incorrectly assumed that the feature would be present on all
|
|
devices and a declaration was unnecessary.</li>
|
|
<li>The developer omitted the feature declaration accidentally.</li>
|
|
<li>The developer declared the feature explicitly, but the declaration was not
|
|
valid. For example, a spelling error in the <code><uses-feature></code>
|
|
element name or an unrecognized string value for the
|
|
<code>android:name</code> attribute would invalidate the feature declaration.
|
|
</li>
|
|
</ul>
|
|
|
|
<p>To account for the cases above, Google Play attempts to discover an
|
|
application's implied feature requirements by examining <em>other elements</em>
|
|
declared in the manifest file, specifically,
|
|
<code><uses-permission></code> elements.</p>
|
|
|
|
<p>If an application requests hardware-related permissions, Google Play
|
|
<em>assumes that the application uses the underlying hardware features and
|
|
therefore requires those features</em>, even though there might be no
|
|
corresponding to <code><uses-feature></code> declarations. For such
|
|
permissions, Google Play adds the underlying hardware features to the
|
|
metadata that it stores for the application and sets up filters for them.</p>
|
|
|
|
<p>For example, if an application requests the <code>CAMERA</code> permission
|
|
but does not declare a <code><uses-feature></code> element for
|
|
<code>android.hardware.camera</code>, Google Play considers that the
|
|
application requires a camera and should not be shown to users whose devices do
|
|
not offer a camera.</p>
|
|
|
|
<p>If you don't want Google Play to filter based on a specific implied
|
|
feature, you can disable that behavior. To do so, declare the feature explicitly
|
|
in a <code><uses-feature></code> element and include an
|
|
<code>android:required="false"</code> attribute. For example, to disable
|
|
filtering derived from the <code>CAMERA</code> permission, you would declare
|
|
the feature as shown below.</p>
|
|
|
|
<pre><uses-feature android:name="android.hardware.camera" android:required="false" /></pre>
|
|
|
|
<p class="caution">It's important to understand that the permissions that you
|
|
request in <code><uses-permission></code> elements can directly affect how
|
|
Google Play filters your application. The reference section <a
|
|
href="#permissions">Permissions that Imply Feature Requirements</a>,
|
|
below, lists the full set of permissions that imply feature requirements and
|
|
therefore trigger filtering.</p>
|
|
|
|
<h3 id="bt-permission-handling">Special handling for Bluetooth feature</h3>
|
|
|
|
<p>Google Play applies slightly different rules than described above, when
|
|
determining filtering for Bluetooth.</p>
|
|
|
|
<p>If an application declares a Bluetooth permission in a
|
|
<code><uses-permission></code> element, but does not explicitly declare
|
|
the Bluetooth feature in a <code><uses-feature></code> element, Google
|
|
Play checks the version(s) of the Android platform on which the application is
|
|
designed to run, as specified in the <code><uses-sdk></code> element. </p>
|
|
|
|
<p>As shown in the table below, Google Play enables filtering for the
|
|
Bluetooth feature only if the application declares its lowest or targeted
|
|
platform as Android 2.0 (API level 5) or higher. However, note that Google
|
|
Play applies the normal rules for filtering when the application explicitly
|
|
declares the Bluetooth feature in a <code><uses-feature></code> element.
|
|
</p>
|
|
|
|
<p class="caption"><strong>Table 1.</strong> How Google Play determines the
|
|
Bluetooth feature requirement for an application that requests a Bluetooth
|
|
permission but does not declare the Bluetooth feature in a
|
|
<code><uses-feature></code> element.</p>
|
|
|
|
<table style="margin-top:1em;">
|
|
<tr>
|
|
<th><nobr>If <code>minSdkVersion</code> is ...</nobr></th>
|
|
<th><nobr>or <code>targetSdkVersion</code> is</nobr></th>
|
|
<th>Result</th>
|
|
</tr>
|
|
<tr>
|
|
<td><nobr><=4 (or uses-sdk is not declared)</nobr></td>
|
|
<td><=4</td>
|
|
<td>Google Play <em>will not</em> filter the application from any devices
|
|
based on their reported support for the <code>android.hardware.bluetooth</code>
|
|
feature.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><=4</td>
|
|
<td>>=5</td>
|
|
<td rowspan="2">Google Play filters the application from any devices that
|
|
do not support the <code>android.hardware.bluetooth</code> feature (including
|
|
older releases).</td>
|
|
</tr>
|
|
<tr>
|
|
<td>>=5</td>
|
|
<td>>=5</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>The examples below illustrate the different filtering effects, based on how
|
|
Google Play handles the Bluetooth feature. </p>
|
|
|
|
<dl>
|
|
<dt>In first example, an application that is designed to run on older API levels
|
|
declares a Bluetooth permission, but does not declare the Bluetooth feature in a
|
|
<code><uses-feature></code> element.</dt>
|
|
<dd><em>Result:</em> Google Play does not filter the application from any device.</dd>
|
|
</dl>
|
|
|
|
<pre><manifest ...>
|
|
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
|
|
<uses-sdk android:minSdkVersion="3" />
|
|
...
|
|
</manifest></pre>
|
|
|
|
<dl>
|
|
<dt>In the second example, below, the same application also declares a target
|
|
API level of "5". </dt>
|
|
<dd><em>Result:</em> Google Play now assumes that the feature is required and
|
|
will filter the application from all devices that do not report Bluetooth support,
|
|
including devices running older versions of the platform. </dd>
|
|
</dl>
|
|
|
|
<pre><manifest ...>
|
|
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
|
|
<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
|
|
...
|
|
</manifest></pre>
|
|
|
|
<dl>
|
|
<dt>Here the same application now specifically declares the Bluetooth feature.</dt>
|
|
<dd><em>Result:</em> Identical to the previous example (filtering is applied).</dd>
|
|
</dl>
|
|
|
|
<pre><manifest ...>
|
|
<uses-feature android:name="android.hardware.bluetooth" />
|
|
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
|
|
<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
|
|
...
|
|
</manifest></pre>
|
|
|
|
<dl>
|
|
<dt>Finally, in the case below, the same application adds an
|
|
<code>android:required="false"</code> attribute.</dt>
|
|
<dd><em>Result:</em> Google Play disables filtering based on Bluetooth
|
|
feature support, for all devices.</dd>
|
|
</dl>
|
|
|
|
<pre><manifest ...>
|
|
<uses-feature android:name="android.hardware.bluetooth" android:required="false" />
|
|
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
|
|
<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
|
|
...
|
|
</manifest></pre>
|
|
|
|
|
|
|
|
<h3 id="testing">Testing the features required by your application</h3>
|
|
|
|
<p>You can use the <code>aapt</code> tool, included in the Android SDK, to
|
|
determine how Google Play will filter your application, based on its declared
|
|
features and permissions. To do so, run <code>aapt</code> with the <code>dump
|
|
badging</code> command. This causes <code>aapt</code> to parse your
|
|
application's manifest and apply the same rules as used by Google Play to
|
|
determine the features that your application requires. </p>
|
|
|
|
<p>To use the tool, follow these steps: </p>
|
|
|
|
<ol>
|
|
<li>First, build and export your application as an unsigned <code>.apk</code>.
|
|
If you are developing in Eclipse with ADT, right-click the project and select
|
|
<strong>Android Tools</strong> > <strong>Export Unsigned Application
|
|
Package</strong>. Select a destination filename and path and click
|
|
<strong>OK</strong>. </li>
|
|
<li>Next, locate the <code>aapt</code> tool, if it is not already in your PATH.
|
|
If you are using SDK Tools r8 or higher, you can find <code>aapt</code> in the
|
|
<code><<em>SDK</em>>/platform-tools/</code> directory.
|
|
<p class="note"><strong>Note:</strong> You must use the version of
|
|
<code>aapt</code> that is provided for the latest Platform-Tools component available. If
|
|
you do not have the latest Platform-Tools component, download it using the <a
|
|
href="{@docRoot}sdk/exploring.html">Android SDK Manager</a>.
|
|
</p></li>
|
|
<li>Run <code>aapt</code> using this syntax: </li>
|
|
</ol>
|
|
|
|
<pre>$ aapt dump badging <<em>path_to_exported_.apk</em>></pre>
|
|
|
|
<p>Here's an example of the command output for the second Bluetooth example, above: </p>
|
|
|
|
<pre>$ ./aapt dump badging BTExample.apk
|
|
package: name='com.example.android.btexample' versionCode='' versionName=''
|
|
<strong>uses-permission:'android.permission.BLUETOOTH_ADMIN'</strong>
|
|
<strong>uses-feature:'android.hardware.bluetooth'</strong>
|
|
sdkVersion:'3'
|
|
targetSdkVersion:'5'
|
|
application: label='BT Example' icon='res/drawable/app_bt_ex.png'
|
|
launchable activity name='com.example.android.btexample.MyActivity'label='' icon=''
|
|
uses-feature:'android.hardware.touchscreen'
|
|
main
|
|
supports-screens: 'small' 'normal' 'large'
|
|
locales: '--_--'
|
|
densities: '160'
|
|
</pre>
|
|
|
|
|
|
<h2 id=features-reference>Features Reference</h2>
|
|
|
|
<p>The tables below provide reference information about hardware and software
|
|
features and the permissions that can imply them on Google Play. </p>
|
|
|
|
<h3 id="hw-features">Hardware features</h3>
|
|
|
|
<p>The table below describes the hardware feature descriptors supported by the
|
|
most current platform release. To signal that your application uses or requires
|
|
a hardware feature, declare each value in a <code>android:name</code> attribute
|
|
in a separate <code><uses-feature></code> element. </p>
|
|
|
|
<table>
|
|
<tr>
|
|
<th>Feature Type</th>
|
|
<th>Feature Descriptor</th>
|
|
<th style="min-width:170px">Description</th>
|
|
<th>Comments</th>
|
|
</tr>
|
|
<tr>
|
|
<td>Audio</td>
|
|
<td><code>android.hardware.audio.low_latency</td>
|
|
<td>The application uses a low-latency audio pipeline on the device and
|
|
is sensitive to delays or lag in sound input or output.</td>
|
|
<td>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="2">Bluetooth</td>
|
|
<td><code>android.hardware.bluetooth</code></td>
|
|
<td>The application uses Bluetooth radio features in the device.</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.bluetooth_le</code></td>
|
|
<td>The application uses Bluetooth Low Energy radio features in the device.</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="6">Camera</td>
|
|
<td><code>android.hardware.camera</code></td>
|
|
<td>The application uses the device's camera. If the device supports
|
|
multiple cameras, the application uses the camera that facing
|
|
away from the screen.</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.camera.autofocus</code></td>
|
|
<td>Subfeature. The application uses the device camera's autofocus capability.</td>
|
|
<td rowspan="3">These subfeatures implicitly declare the
|
|
<code>android.hardware.camera</code> parent feature, unless declared with
|
|
<code>android:required="false"</code>.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.camera.flash</code></td>
|
|
<td>Subfeature. The application uses the device camera's flash.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.camera.front</code></td>
|
|
<td>Subfeature. The application uses a front-facing camera on the device.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.camera.any</code></td>
|
|
<td>The application uses at least one camera facing in any direction, or an
|
|
external camera device if one is connected. Use this in preference to
|
|
<code>android.hardware.camera</code> if a back-facing camera is not required.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.camera.external</code></td>
|
|
<td>The application uses an external camera device if one is connected.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.camera.level.full</code></td>
|
|
<td>The application uses a camera device with <code>FULL</code>-level support.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.camera.capability.manual_sensor</code></td>
|
|
<td>The application uses a a camera device with the <code>MANUAL_SENSOR</code> capability.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.camera.capability.manual_post_processing</code></td>
|
|
<td>The application uses a a camera device with the <code>MANUAL_POST_PROCESSING</code> capability.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.camera.capability.raw</code></td>
|
|
<td>The application uses a a camera device with the <code>RAW</code> capability.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>Infrared</td>
|
|
<td><code>android.hardware.consumerir</code></td>
|
|
<td>The application uses the consumer IR capabilities on the device.</td>
|
|
<td></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td rowspan="3">Location</td>
|
|
<td><code>android.hardware.location</code></td>
|
|
<td>The application uses one or more features on the device for determining
|
|
location, such as GPS location, network location, or cell location.</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.location.network</code></td>
|
|
<td>Subfeature. The application uses coarse location coordinates obtained from
|
|
a network-based geolocation system supported on the device.</td>
|
|
<td rowspan="2">These subfeatures implicitly declare the
|
|
<code>android.hardware.location</code> parent feature, unless declared with
|
|
<code>android:required="false"</code>. </td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.location.gps</code></td>
|
|
<td>Subfeature. The application uses precise location coordinates obtained
|
|
from a Global Positioning System receiver on the device. </td>
|
|
</tr>
|
|
<tr>
|
|
<td>Microphone</td>
|
|
<td><code>android.hardware.microphone</code></td>
|
|
<td>The application uses a microphone on the device.
|
|
</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="2">NFC</td>
|
|
<td><code>android.hardware.nfc</td>
|
|
<td>The application uses Near Field Communications radio features in the device.</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.nfc.hce</code></td>
|
|
<td>The application uses the NFC card emulation feature in the device.</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="8">Sensors</td>
|
|
<td><code>android.hardware.sensor.accelerometer</code></td>
|
|
<td>The application uses motion readings from an accelerometer on the
|
|
device.</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.sensor.barometer</code></td>
|
|
<td>The application uses the device's barometer.</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.sensor.compass</code></td>
|
|
<td>The application uses directional readings from a magnetometer (compass) on
|
|
the device.</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.sensor.gyroscope</code></td>
|
|
<td>The application uses the device's gyroscope sensor.</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.sensor.light</code></td>
|
|
<td>The application uses the device's light sensor.</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.sensor.proximity</code></td>
|
|
<td>The application uses the device's proximity sensor.</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.sensor.stepcounter</code></td>
|
|
<td>The application uses the device's step counter.</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.sensor.stepdetector</code></td>
|
|
<td>The application uses the device's step detector.</td>
|
|
<td></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td rowspan="2">Screen</td>
|
|
<td><code>android.hardware.screen.landscape</code></td>
|
|
<td>The application requires landscape orientation.</td>
|
|
<td rowspan="2">
|
|
<p>For example, if your app requires portrait orientation, you should declare
|
|
<code><uses-feature android:name="android.hardware.screen.portrait"/></code> so that only devices
|
|
that support portrait orientation (whether always or by user choice) can install your app. If your
|
|
application <em>supports</em> both orientations, then you don't need to declare either.</p>
|
|
<p>Both orientations are assumed <em>not required</em>, by default, so your app may be installed
|
|
on devices that support one or both orientations. However, if any of your activities request that
|
|
they run in a specific orientation, using the <a
|
|
href="{@docRoot}guide/topics/manifest/activity-element.html#screen">{@code
|
|
android:screenOrientation}</a> attribute, then this also declares that the application requires that
|
|
orientation. For example, if you declare <a
|
|
href="{@docRoot}guide/topics/manifest/activity-element.html#screen">{@code
|
|
android:screenOrientation}</a> with either {@code "landscape"}, {@code "reverseLandscape"}, or
|
|
{@code "sensorLandscape"}, then your application will be available only to devices that support
|
|
landscape orientation. As a best practice, you should still declare your requirement for this
|
|
orientation using a {@code <uses-feature>} element. If you declare an orientation for your
|
|
activity using <a href="{@docRoot}guide/topics/manifest/activity-element.html#screen">{@code
|
|
android:screenOrientation}</a>, but don't actually <em>require</em> it, you can disable the
|
|
requirement by declaring the orientation with a {@code <uses-feature>} element and include
|
|
{@code android:required="false"}.</p>
|
|
<p>For backwards compatibility, any device running a platform version that supports only API
|
|
level 12 or lower is assumed to support both landscape and portrait.</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.screen.portrait</code></td>
|
|
<td>The application requires portrait orientation.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td rowspan="3">Telephony</td>
|
|
<td><code>android.hardware.telephony</code></td>
|
|
<td>The application uses telephony features on the device, such as telephony
|
|
radio with data communication services.</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.telephony.cdma</code></td>
|
|
<td>Subfeature. The application uses CDMA telephony radio features on the
|
|
device. </td>
|
|
<td rowspan="2">These subfeatures implicitly declare the
|
|
<code>android.hardware.telephony</code> parent feature, unless declared with
|
|
<code>android:required="false"</code>. </td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.telephony.gsm</code></td>
|
|
<td>Subfeature. The application uses GSM telephony radio features on the
|
|
device.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>Television</td>
|
|
<td><code>android.hardware.type.television</code></td>
|
|
<td>The application is designed for a television user experience.</td>
|
|
<td>This feature defines "television" to be a typical living room television experience:
|
|
displayed on a big screen, where the user is sitting far away and the dominant form of
|
|
input is something like a d-pad, and generally not through touch or a
|
|
mouse/pointer-device.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td rowspan="7">Touchscreen</td>
|
|
<td><code>android.hardware.faketouch</code></td>
|
|
<td>The application uses basic touch interaction events, such as "click down", "click
|
|
up", and drag.</td>
|
|
<td><p>When declared as required, this indicates that the application is compatible with a device
|
|
only if it offers an emulated touchscreen ("fake touch" interface), or better. A device that offers
|
|
a fake touch interface provides a user input system that emulates a subset of touchscreen
|
|
capabilities. For example, a mouse or remote control that drives an on-screen cursor provides a fake
|
|
touch interface. If your application requires basic point and click interaction (in other
|
|
words, it won't work with <em>only</em> a d-pad controller), you should declare this feature.
|
|
Because this is the minimum level of touch interaction, your app will also be compatible with
|
|
devices that offer more complex touch interfaces.</p>
|
|
<p class="note"><strong>Note:</strong> Because applications require the {@code
|
|
android.hardware.touchscreen} feature by default, if you want your application to be available to
|
|
devices that provide a fake touch interface, you must also explicitly declare that a touch screen is
|
|
<em>not</em> required by declaring {@code <uses-feature
|
|
android:name="android.hardware.touchscreen" <strong>android:required="false"</strong>
|
|
/>}</p></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td><code>android.hardware.faketouch.multitouch.distinct</code></td>
|
|
<td>The application performs distinct tracking of two or more "fingers" on a fake touch
|
|
interface. This is a superset of the faketouch feature.</td>
|
|
<td><p>When declared as required, this indicates that the application is compatible with a device
|
|
only if it supports touch emulation for events that supports distinct tracking of two or more
|
|
fingers, or better.</p>
|
|
<p>Unlike the distinct multitouch defined by {@code
|
|
android.hardware.touchscreen.multitouch.distinct}, input devices that support distinct multi-touch
|
|
with a fake touch interface will not support all two-finger gestures, because the input is
|
|
being transformed to cursor movement on the screen. That is, single finger gestures on such a device
|
|
move a cursor; two-finger swipes will result in single-finger touch events; other two-finger
|
|
gestures will result in the corresponding two-finger touch event. An example device that supports
|
|
distinct multi-touch with a fake touch interface is one that provides a trackpad for cursor movement
|
|
which also supports two or more fingers.</p></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td><code>android.hardware.faketouch.multitouch.jazzhand</code></td>
|
|
<td>The application performs distinct tracking of five or more "fingers" on a fake touch
|
|
interface. This is a superset of the faketouch feature.</td>
|
|
<td><p>When declared as required, this indicates that the application is compatible with a device
|
|
only if it supports touch emulation for events that supports distinct tracking of five or more
|
|
fingers.</p>
|
|
<p>Unlike the distinct multitouch defined by {@code
|
|
android.hardware.touchscreen.multitouch.jazzhand}, input devices that support jazzhand multi-touch
|
|
with a fake touch interface will not support all five-finger gestures, because the input is being
|
|
transformed to cursor movement on the screen. That is, single finger gestures on such a device move
|
|
a cursor; multi-finger gestures will result in single-finger touch events; other multi-finger
|
|
gestures will result in the corresponding multi-finger touch event. An example device that supports
|
|
distinct multi-touch with a fake touch interface is one that provides a trackpad for cursor movement
|
|
which also supports five or more fingers.</p></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td><code>android.hardware.touchscreen</code></td>
|
|
<td>The application uses touchscreen capabilities for gestures that are more interactive
|
|
than basic touch events, such as a fling. This is a superset of the basic faketouch feature.</td>
|
|
<td><p>By default, your application requires this. As such, your application is <em>not</em>
|
|
available to devices that provide only an emulated touch interface ("fake touch"), by default. If
|
|
you want your application available to devices that provide a fake touch interface (or even devices
|
|
that provide only a d-pad controller), you must explicitly declare that a touch screen is not
|
|
required, by declaring {@code android.hardware.touchscreen} with {@code android:required="false"}.
|
|
You should do so even if your application uses—but does not <em>require</em>—a real
|
|
touch screen interface.</p>
|
|
<p>If your application <em>does require</em> a touch interface (in order to perform touch
|
|
gestures such as a fling), then you don't need to do anything, because this is required by default.
|
|
However, it's best if you explicitly declare all features used by your application, so you should
|
|
still declare this if your app uses it.</p>
|
|
<p>If you require more complex touch interaction, such as multi-finger gestures, you
|
|
should declare the advanced touch screen features below.</p></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.touchscreen.multitouch</code></td>
|
|
<td>The application uses basic two-point multitouch capabilities on the device
|
|
screen, such as for pinch gestures, but does not need to track touches independently. This
|
|
is a superset of touchscreen feature.</td>
|
|
<td>This implicitly declares the <code>android.hardware.touchscreen</code> parent feature, unless
|
|
declared with <code>android:required="false"</code>. </td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.touchscreen.multitouch.distinct</code></td>
|
|
<td>Subfeature. The application uses advanced multipoint multitouch
|
|
capabilities on the device screen, such as for tracking two or more points fully
|
|
independently. This is a superset of multitouch feature.</td>
|
|
<td rowspan="2">This implicitly declares the <code>android.hardware.touchscreen.multitouch</code>
|
|
parent feature, unless declared with <code>android:required="false"</code>. </td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.touchscreen.multitouch.jazzhand</code></td>
|
|
<td>The application uses advanced multipoint multitouch
|
|
capabilities on the device screen, for tracking up to five points fully
|
|
independently. This is a superset of distinct multitouch feature.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td rowspan="2">USB</td>
|
|
<td><code>android.hardware.usb.host</code></td>
|
|
<td>The application uses USB host mode features (behaves as the host and connects to USB
|
|
devices).</td>
|
|
<td></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td><code>android.hardware.usb.accessory</code></td>
|
|
<td>The application uses USB accessory features (behaves as the USB device and connects to USB
|
|
hosts).</td>
|
|
<td></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td rowspan="2">Wi-Fi</td>
|
|
<td><code>android.hardware.wifi</code></td>
|
|
<td>The application uses 802.11 networking (Wi-Fi) features on the device.</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.hardware.wifi.direct</code></td>
|
|
<td>The application uses the Wi-Fi Direct networking features on the device.</td>
|
|
</tr>
|
|
|
|
</table>
|
|
|
|
<h3 id="sw-features">Software features</h3>
|
|
|
|
<p>The table below describes the software feature descriptors supported by the
|
|
most current platform release. To signal that your application uses or requires
|
|
a software feature, declare each value in a <code>android:name</code> attribute
|
|
in a separate <code><uses-feature></code> element. </p>
|
|
|
|
|
|
<table>
|
|
<tr>
|
|
<th>Feature</th>
|
|
<th>Attribute Value</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
<tr>
|
|
<td>App Widgets</td>
|
|
<td><code>android.software.app_widgets</code></td>
|
|
<td>The application uses or provides App Widgets and should be installed only on devices
|
|
that include a Home screen or similar location where users can embed App Widgets.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Device Management</td>
|
|
<td><code>android.software.device_admin</code></td>
|
|
<td>The application uses device policy enforcement via device administrators.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Home Screen</td>
|
|
<td><code>android.software.home_screen</code></td>
|
|
<td>The application behaves as a Home screen replacement and should be installed only on
|
|
devices that support third-party Home screen apps.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Input Method</td>
|
|
<td><code>android.software.input_methods</code></td>
|
|
<td>The application provides a custom input method and should be installed only on devices that
|
|
support third-party input methods.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Live Wallpaper</td>
|
|
<td><code>android.software.live_wallpaper</code></td>
|
|
<td>The application uses or provides Live Wallpapers and should be installed only on devices that
|
|
support Live Wallpapers.</td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="2">SIP/VOIP</td>
|
|
<td><code>android.software.sip</code></td>
|
|
<td>The application uses SIP service on the device and should be installed only on devices that
|
|
support SIP.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>android.software.sip.voip</code></td>
|
|
<td><p>Subfeature. The application uses SIP-based VOIP service on the device.
|
|
<p>This subfeature implicitly declares the <code>android.software.sip</code> parent feature,
|
|
unless declared with <code>android:required="false"</code>.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
|
|
<h3 id="permissions">Permissions that Imply Feature Requirements</h3>
|
|
|
|
<p>Some feature constants listed in the tables above were made available to
|
|
applications <em>after</em> the corresponding API; for example, the
|
|
<code>android.hardware.bluetooth</code> feature was added in Android 2.2 (API
|
|
level 8), but the bluetooth API that it refers to was added in Android 2.0 (API
|
|
level 5). Because of this, some apps were able to use the API before they had
|
|
the ability to declare that they require the API via the
|
|
<code><uses-feature></code> system. </p>
|
|
|
|
<p>To prevent those apps from being made available unintentionally, Google
|
|
Play assumes that certain hardware-related permissions indicate that the
|
|
underlying hardware features are required by default. For instance, applications
|
|
that use Bluetooth must request the <code>BLUETOOTH</code> permission in a
|
|
<code><uses-permission></code> element — for legacy apps, Google
|
|
Play assumes that the permission declaration means that the underlying
|
|
<code>android.hardware.bluetooth</code> feature is required by the application
|
|
and sets up filtering based on that feature. </p>
|
|
|
|
<p>The table below lists permissions that imply feature requirements
|
|
equivalent to those declared in <code><uses-feature></code> elements. Note
|
|
that <code><uses-feature></code> declarations, including any declared
|
|
<code>android:required</code> attribute, always take precedence over features
|
|
implied by the permissions below. </p>
|
|
|
|
<p>For any of the permissions below, you can disable filtering based on the
|
|
implied feature by explicitly declaring the implied feature explicitly, in a
|
|
<code><uses-feature></code> element, with an
|
|
<code>android:required="false"</code> attribute. For example, to disable any
|
|
filtering based on the <code>CAMERA</code> permission, you would add this
|
|
<code><uses-feature></code> declaration to the manifest file:</p>
|
|
|
|
<pre><uses-feature android:name="android.hardware.camera" android:required="false" /></pre>
|
|
|
|
<table id="permissions-features" >
|
|
<tr>
|
|
<th>Category</th>
|
|
<th>This Permission...</th>
|
|
<th>Implies This Feature Requirement</th>
|
|
<!-- <th>Comments</th> -->
|
|
</tr>
|
|
|
|
|
|
<tr>
|
|
<td rowspan="2">Bluetooth</td>
|
|
<td><code>BLUETOOTH</code></td>
|
|
<td><code>android.hardware.bluetooth</code>
|
|
<p>(See <a href="#bt-permission-handling">Special handling for Bluetooth feature</a> for details.)</p></td>
|
|
<!-- <td></td> -->
|
|
</tr>
|
|
<tr>
|
|
<td><code>BLUETOOTH_ADMIN</code></td>
|
|
<td><code>android.hardware.bluetooth</code></td>
|
|
<!-- <td></td> -->
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>Camera</td>
|
|
<td><code>CAMERA</code></td>
|
|
<td><code>android.hardware.camera</code> <em>and</em>
|
|
<br><code>android.hardware.camera.autofocus</code></td>
|
|
<!-- <td></td> -->
|
|
</tr>
|
|
|
|
<tr>
|
|
<td rowspan="5">Location</td>
|
|
<td><code>ACCESS_MOCK_LOCATION</code></td>
|
|
<td><code>android.hardware.location</code></td>
|
|
<!-- <td></td> -->
|
|
</tr>
|
|
<tr>
|
|
<td><code>ACCESS_LOCATION_EXTRA_COMMANDS</code></td>
|
|
<td><code>android.hardware.location</code></td>
|
|
<!-- <td></td> -->
|
|
</tr>
|
|
<tr>
|
|
<td><code>INSTALL_LOCATION_PROVIDER</code></td>
|
|
<td><code>android.hardware.location</code></td>
|
|
<!-- <td></td> -->
|
|
</tr>
|
|
<tr>
|
|
<td><code>ACCESS_COARSE_LOCATION</code></td>
|
|
<td><code>android.hardware.location.network</code> <em>and</em>
|
|
<br><code>android.hardware.location</code></td>
|
|
<!-- <td></td> -->
|
|
</tr>
|
|
<tr>
|
|
<td><code>ACCESS_FINE_LOCATION</code></td>
|
|
<td><code>android.hardware.location.gps</code> <em>and</em>
|
|
<br><code>android.hardware.location</code></td>
|
|
<!-- <td></td> -->
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>Microphone</td>
|
|
<td><code>RECORD_AUDIO</code></td>
|
|
<td><code>android.hardware.microphone</code></td>
|
|
<!-- <td></td> -->
|
|
</tr>
|
|
|
|
<tr>
|
|
<td rowspan="11">Telephony</td>
|
|
<td><code>CALL_PHONE</code></td>
|
|
<td><code>android.hardware.telephony</code></td>
|
|
<!-- <td></td> -->
|
|
</tr>
|
|
<tr>
|
|
<td><code>CALL_PRIVILEGED</code></td>
|
|
<td><code>android.hardware.telephony</code></td>
|
|
<!-- <td></td> -->
|
|
</tr>
|
|
|
|
<tr>
|
|
<td><code>MODIFY_PHONE_STATE</code></td>
|
|
<td><code>android.hardware.telephony</code></td>
|
|
<!-- <td></td> -->
|
|
</tr>
|
|
<tr>
|
|
<td><code>PROCESS_OUTGOING_CALLS</code></td>
|
|
<td><code>android.hardware.telephony</code></td>
|
|
<!-- <td></td> -->
|
|
</tr>
|
|
<tr>
|
|
<td><code>READ_SMS</code></td>
|
|
<td><code>android.hardware.telephony</code></td>
|
|
<!-- <td></td> -->
|
|
</tr>
|
|
<tr>
|
|
<td><code>RECEIVE_SMS</code></td>
|
|
<td><code>android.hardware.telephony</code></td>
|
|
<!-- <td></td> -->
|
|
</tr>
|
|
<tr>
|
|
<td><code>RECEIVE_MMS</code></td>
|
|
<td><code>android.hardware.telephony</code></td>
|
|
<!-- <td></td> -->
|
|
</tr>
|
|
<tr>
|
|
<td><code>RECEIVE_WAP_PUSH</code></td>
|
|
<td><code>android.hardware.telephony</code></td>
|
|
<!-- <td></td> -->
|
|
</tr>
|
|
<tr>
|
|
<td><code>SEND_SMS</code></td>
|
|
<td><code>android.hardware.telephony</code></td>
|
|
<!-- <td></td> -->
|
|
</tr>
|
|
<tr>
|
|
<td><code>WRITE_APN_SETTINGS</code></td>
|
|
<td><code>android.hardware.telephony</code></td>
|
|
<!-- <td></td> -->
|
|
</tr>
|
|
<tr>
|
|
<td><code>WRITE_SMS</code></td>
|
|
<td><code>android.hardware.telephony</code></td>
|
|
<!-- <td></td> -->
|
|
</tr>
|
|
|
|
<tr>
|
|
<td rowspan="3">Wi-Fi</td>
|
|
<td><code>ACCESS_WIFI_STATE</code></td>
|
|
<td><code>android.hardware.wifi</code></td>
|
|
<!-- <td></td> -->
|
|
</tr>
|
|
<tr>
|
|
<td><code>CHANGE_WIFI_STATE</code></td>
|
|
<td><code>android.hardware.wifi</code></td>
|
|
<!-- <td></td> -->
|
|
</tr>
|
|
<tr>
|
|
<td><code>CHANGE_WIFI_MULTICAST_STATE</code></td>
|
|
<td><code>android.hardware.wifi</code></td>
|
|
<!-- <td></td> -->
|
|
</tr>
|
|
</table>
|