I belive the key is in your permissions. By saying that your app uses RECEIVE_SMS and READ_PHONE_STATE Google Play uses that to filter out devices that can't do those things (tablets) because it thinks that your app needs to use those permissions in order to work. According to the android developer site:
**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 BLUETOOTH permission in a element — for legacy apps, Google Play assumes that the permission declaration means that the underlying android.hardware.bluetooth feature is required by the application and sets up filtering based on that feature.**
Also, look at this:
Telephony CALL_PHONE android.hardware.telephony CALL_PRIVILEGED android.hardware.telephony MODIFY_PHONE_STATE android.hardware.telephony PROCESS_OUTGOING_CALLS android.hardware.telephony READ_SMS android.hardware.telephony RECEIVE_SMS android.hardware.telephony RECEIVE_MMS android.hardware.telephony RECEIVE_WAP_PUSH android.hardware.telephony SEND_SMS android.hardware.telephony WRITE_APN_SETTINGS android.hardware.telephony WRITE_SMS android.hardware.telephony
You have `RECEIVE_SMS` and `READ_PHONE_STATE` so you automatically have `android.hardware.telephony`. You can fix this by doing
<uses-feature android:name="android.hardware.telephony" android:required="false" />
All of this is explained in more depth [here](http://developer.android.com/guide/topics/manifest/uses-feature-element.html#permissions).
I belive the key is in your permissions. By saying that your app uses `RECEIVE_SMS` and `READ_PHONE_STATE` Google Play uses that to filter out devices that can't do those things (tablets) because it thinks that your app needs to use those permissions in order to work. According to the android developer site:
> "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 BLUETOOTH
> permission in a <uses-permission> element — for legacy apps, Google
> Play assumes that the permission declaration means that the underlying
> android.hardware.bluetooth feature is required by the application and
> sets up filtering based on that feature."
Also, look at this:
> Telephony CALL_PHONE android.hardware.telephony
CALL_PRIVILEGED android.hardware.telephony
MODIFY_PHONE_STATE android.hardware.telephony
PROCESS_OUTGOING_CALLS android.hardware.telephony
READ_SMS android.hardware.telephony
RECEIVE_SMS android.hardware.telephony
RECEIVE_MMS android.hardware.telephony
RECEIVE_WAP_PUSH android.hardware.telephony
SEND_SMS android.hardware.telephony
WRITE_APN_SETTINGS android.hardware.telephony
WRITE_SMS android.hardware.telephony
You have `RECEIVE_SMS` and `READ_PHONE_STATE` so you automatically have `android.hardware.telephony`. You can fix this by doing
<uses-feature android:name="android.hardware.telephony" android:required="false" />
All of this is explained in more depth [here][1].
[1]: http://developer.android.com/guide/topics/manifest/uses-feature-element.html#permissions