XOOM, Permissions, and the Android Market

If you have requested permissions like CALL_PHONE or SEND_SMS, make sure that you have taken the proper steps, or else your application will not be available for the XOOM, and presumably for other Android 3.0-based tablets.

Some permissions imply that you need certain hardware features. Visit this page in the docs and scroll down to the “Permissions that Imply Feature Requirements” section.

The Android Market treats as though requesting a permission like CALL_PHONE also requests:

<uses-feature android:name="android.hardware.telephony" />

The XOOM does not have telephony — the first Android Market-compliant device with that limitation. While it can have a data plan, it has no voice or SMS capability, and so it is treated as not having android.hardware.telephony. But, if you request permissions like CALL_PHONE, the Android Market by default will assume you need android.hardware.telephony. As a result, you will be filtered out of the Market for the XOOM.

The solution is simple: for any hardware features that might be implied by permissions but that you do not absolutely need, manually add the appropriate <uses-feature> element to your manifest with android:required="false":

<uses-feature android:name="android.hardware.telephony"
		android:required="false" />

Then, before you try placing a phone call or sending an SMS or something, use PackageManager and getSystemAvailableFeatures() to find out if android.hardware.telephony is indeed available on the device. For example, you might check for telephony early on and disable various menu choices or buttons that might lead to the user to place a call or send an SMS.

Now, if your application absolutely needs telephony, then the implied <uses-feature> will work, though you may wish to consider putting one in explicitly. However, just bear in mind that this means your app will not work on the XOOM or other tablets that lack telephony.