Reputation: 13
I have an app published in the Play Store build with Titanium, but is showing a really low number of compatible devices and I can't figure out the reason.
The app is built for a min version of SDK 14 and I don't have any strange requirements on permissions. Here is the AndroidManifest.xml generated by Titanium:
<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.proximityaware.montrose" android:versionCode="23" android:versionName="2.0.30">
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23"/>
<application android:icon="@drawable/appicon" android:label="GoMontrose" android:name="GomontroseApplication" android:debuggable="false" android:theme="@style/Theme.AppBlue">
<activity android:name=".GomontroseActivity" android:label="@string/app_name" android:theme="@style/Theme.Titanium" android:configChanges="keyboardHidden|orientation|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:configChanges="keyboardHidden|orientation|screenSize" android:name="org.appcelerator.titanium.TiActivity" android:screenOrientation="portrait"/>
<activity android:name="org.appcelerator.titanium.TiTranslucentActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:theme="@style/Theme.AppCompat.Translucent"/>
<activity android:name="ti.modules.titanium.ui.android.TiPreferencesActivity" android:configChanges="screenSize"/>
<activity android:name="ti.modules.titanium.media.TiCameraActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:theme="@style/Theme.AppCompat.Translucent.NoTitleBar.Fullscreen"/>
<service android:enabled="true" android:exported="true" android:isolatedProcess="false" android:label="iBeacon" android:name="com.radiusnetworks.ibeacon.service.IBeaconService"/>
<service android:enabled="true" android:name="com.radiusnetworks.ibeacon.IBeaconIntentProcessor">
<meta-data android:name="background" android:value="true"/>
<intent-filter android:priority="1">
<action android:name="com.proximityaware.montrose.DID_RANGING"/>
<action android:name="com.proximityaware.montrose.DID_MONITORING"/>
</intent-filter>
</service>
<service android:name="nl.vanvianen.android.gcm.GCMIntentService"/>
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="HIDDEN"/>
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
<receiver android:name="nl.vanvianen.android.gcm.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<category android:name="android.intent.category.HOME"/>
</intent-filter>
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE"/>
<category android:name="com.proximityaware.montrose"/>
</intent-filter>
<intent-filter>
<action android:name="com.google.android.c2dm.intent.REGISTRATION"/>
<category android:name="com.proximityaware.montrose"/>
</intent-filter>
</receiver>
</application>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.READ_CALENDAR"/>
<uses-permission android:name="android.permission.WRITE_CALENDAR"/>
<uses-permission android:name="com.proximityaware.montrose.permission.MAPS_RECEIVE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
<uses-permission android:name="com.proximityaware.montrose.permission.C2D_MESSAGE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.USE_CREDENTIALS"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.camera.autofocus"/>
<uses-feature android:name="android.hardware.camera.flash"/>
<permission android:name="com.proximityaware.montrose.permission.MAPS_RECEIVE" android:protectionLevel="signature"/>
<permission android:name="com.proximityaware.montrose.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
</manifest>
I have tested the app in multiple devices in which Play Store says is incompatible, but if you download the app, it works with all the features.
Upvotes: 0
Views: 98
Reputation: 13
In answer to my own question. Per Android's documentation on how it filters permissions: http://developer.android.com/google/play/filters.html
When you use a <uses-permission>
it automatically sets the correct <uses-feature>
. So you need to make the correct <uses-feature>
NOT required. This solved my issue.
Upvotes: 1
Reputation: 3866
The default for <uses-permission>
is to be required. So see if you can override some with required="false"
that you don't absolutely need. Then in your code make sure you test for the feature using methodes like hasCompas.
Upvotes: 1