I have an Android application on Android Market, but some users are complaining about an error shown when the installation starts, just after the download:
One of them sent me a video of this error showing up, and I could see that this error is not caused by the application, but probably in the verification of permission/features process.
As far as I know, this error is just happening on Motorola Droid/Milestone devices running Eclair, it doesn't happen with Froyo. Unfortunately, I don't have access to any device like this one in order to run logcat and check what's going on.
Here are my permission/features on AndroidManifest.xml:
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.location" />
<uses-feature android:name="android.hardware.telephony" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
I finally found out what's happening by getting a Droid device and running logcat:
E/PackageManager( 1280): Package com.mycompany.myapp requires unavailable feature android.hardware.telephony; failing!
Motorola Droid devices running Eclair are not able to install applications that declare
<uses-feature android:name="android.hardware.telephony" />
in their manifest. It's very strange, though, because the Android Market should hide it from these devices. This is probably a bug caused by the changes made to the Eclair by Motorola, since it doesn't happen with other devices running Eclair, neither with the same Droid running Froyo.
According to the docs:
Android Market attempts to discover an application's implied feature
requirements by examining other elements declared in the manifest
file, specifically, <uses-permission> elements.
Given that, have you tried removing the uses-feature tags? Since those are implied by the uses-permissions tags, and you aren't using the "android:required" attribute.
The device say " this feature is not available in this device " when I'm installing an app downloaded from play store and i have to give it permission
Related
I am trying to scan for Bluetooth LE devices in Android with Java. Everything worked fine and I released an update and on fresh installs it does not work. I went through every weird and funcky permission related to BLE on Android inclusive of ACCESS_FINE_LOCATION permissions.
Deeply reviewed the following:
https://developer.android.com/guide/topics/connectivity/bluetooth/permissions
I can’t see what I’m doing wrong:
My app works on older versions of Android, with a fresh install, on an S7 with Android 8.0.
does not work on Samsung S9 and S10+ running Android 9.0 and 11.0, respectively.
Location permissions is enabled. I can see this programmatically and via settings. Picture below
Screenshot of Location enabled on non-scanning S9 with Android 9.0
I can reproduce the same issue with this independent code base https://github.com/PunchThrough/ble-starter-android.
I thought I was crazy but the above code base is does the same thing for Android 10 and has all the same permissions my app has. with the same problematic results. I’m guessing this is happening for others.
28sec video of issue:
https://youtu.be/PzSZ0RnuORQ
What am I not seeing? What changed?
UPDATE WITH PERMISSIONS:
<!-- To auto-complete the email text field in the login form with the user's emails -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30" />
-->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
In an application that I recently uploaded at Google Play there are reports of some users that the application can not even executed. In particular it is reported that this happens at
Samsung S4
LG Nexus 4
Sony Xperia Z2
Samsung Note 1 (N7000) (ANDROID 4.1.2)
The permissions of the app are
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
and
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="22" />
A possible code incompatibility maybe is on the file functions since the application checks for a particular folder to exist every time that it executes and try to create it if it is not exist. However, since I do not have access at that devices, I can not be sure of anything.
So the question is:
Is there any particular restrictions on that devices concerning the permissions of the application? What could be the problems in the code that creates this problematic behaviour?
Thank you in advance for any hints or advices.
The problem was at the third line of the MainActivity where I declared that the application will appear in landscape mode...
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
For a reason I do not understand that line created a memory overflow in some devices and the application was instantly crashed. I manage to find the faulty code by try and error when I created a Nexus 5 API 22 x86 virtual device and reproduce this situation.
The solution was to remove the above faulty line and type
android:screenOrientation="landscape"
in the AndroidManifest.xml file.
I developed a wearable app, worked fine on my devices (Nexus 5, Samsung Gear Live and Moto 360) and put on playstore. However, when I browse the app on PlayStore, it said "No eligible devices for app install".
These are the permissions:
Phone:
<uses-feature
android:name="android.hardware.type.watch"
android:required="false" />
<uses-permission android:name="android.permission.BODY_SENSORS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" />
Wear:
<uses-feature
android:name="android.hardware.type.watch"
android:required="false" />
<uses-permission android:name="android.permission.BODY_SENSORS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
I already tried this:
<uses-feature
android:name="android.hardware.type.watch"
android:required="true" />
For both apps, still no luck. How to solve this problem? Thanks.
Edit: if you want to try the app, here is the link
https://play.google.com/store/apps/details?id=com.sleepalert.heartrate
Edit 2:
For wear, I used this pair
minSdkVersion 20
targetSdkVersion 21
For mobile, I used this (those are defaults when I generated my project)
minSdkVersion 17
targetSdkVersion 21
Edit 3: after I remove the GET_TASKS permission as suggested, the app can be installed on my device running LolliPop 5, but not on my friend LolliPop 5.1, which is annoying since the newer one is supposed to be backwards compatible. Then if I change targetSdk to 22, it works on both. So in all, it's fine now. Hope helpful to somebody facing this crazy mess.
it seems that my phone is also not compatible. i would suggest you try to check if the app is avaliable in every country or has any restriction (being still in beta we should have acces to it ,thought), and check if all the permissions are necessary , could be that one of them , like GET_TASKS, wich is deprecated ( developer.android.com/reference/android/… ) could be blocking.
I am the developer of a rather popular game published on Android Play Store. Until just the latest version, most devices, if not all, were able to download and enjoy this game. However with this latest version, a lot of older devices (~2 years old?) have started seeing the game as "incompatible" with their device.
I diffed the manifest files of the two versions, and the only difference that pops up is the change to android:versionName, android:versionCode.
I related thread suggested that this might be because the APK might be too big for the devices. While it is true that we do have the APK sitting at ~49 mb, it only grew from 48.66 -> 48.68 this version, so I find it hard to believe that this is the reason.
The list of incompatible devices is quite extensive but here are some of the standouts..
galaxy nexus
samsung galaxy tab 10.1
Samsung Galaxy Tab 7.7
eeepad asus transformer tf101
Motorola XOOM
Acer Iconia Tab A700
This list is directly from our (former?) customers, but I have verified this on a Galaxy tab 10.1, and Transformer. Tab 2 and Nexus 7 are able to see it, if that helps.
Update: These devices are shown as compatible in the developer console.
Have there been any recent changes in the way these things are decided? Is there any service which tells us why the app is said to be incompatible?
The permissions section of my app is below
<permission android:name="com.nubee.japanlife.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.nubee.japanlife.permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="7"/>
As I can see you have lots of permissions in your application which in most devices / tablets won't let you to install it via Play Store. Depending on what is actually doing your application and in what kind of device (phone / tablet) it will be used in most cases you should consider using for example :
<uses-feature
android:name="android.hardware.telephony"
android:required="false" />
First of all it's just an example! I am doing that in one of my apps where I am letting the user call certain numbers, that's why I need TELEPHONY permission, but it's not neccessary for my app. That's why I am using use_feature with required=false.
Hope this helps you!
I'm having trouble getting my app to install on a tablet through the market. Note I'm not using Honeycomb as the app is primarily for a phone. Previousdly I was using level 7 but now changed it to level 10 (2.3.3) to support xlargeScreens. The app installs on my tablet via adb and works great but its not possible to install through the market.
I've read several posts on SO and thought my manifest is correct after adding the supports-screen property.
Here are the most important parts of my manifest:
<uses-sdk android:minSdkVersion="7" />
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:xlargeScreens="true" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Any idea where I'm going wrong?
Thanks in advance.
it's probably your android.permission.MODIFY_PHONE_STATE.
check this official issue that is specific to 2.3+
http://code.google.com/p/android/issues/detail?id=15031
The MODIFY_PHONE_STATE permission was marked as "for system use only" in Android 2.3.
While this was never intended for developers and publicly endorsed by Google, there are hundreds of apps in the marketplace using it. Unfortunately, a seemingly innocent checking by the Android folks has now crippled many popular apps for Android 2.3+.
This is an ENHANCEMENT request that you:
1. Restore the MODIFY_PHONE_STATE permission for Android 2.3.x
2. Create a proper Telephony API for Android 2.3+ (at which time you can remove the MODIFY_PHONE_STATE permission)
If the problem is related to MODIFY_PHONE_STATE
Maybe you can try:
<uses-feature android:name="android.hardware.telephony" android:required="false" />
Never try this, but you can check.
By the way, here you have the information regarding Market-Filtering
Market Filtering