All those devices which are not grayed out are WAN devices which contain a GPS chip, I suspect somewhere in your manifest you are saying that GPS or WAN is required, can you check that? Or share your manifest here? I haven't heard of a device in the Play Store not being able to support the EMDK before.
Regarding the second question, most customers put the EMDK library behind a sort of proxy, I have an example from one of my own projects here: WakeLock_WifiLock_Exerciser/EMDKProxy.java at master · darryncampbell/WakeLock_WifiLock_Exerciser · GitHub
If you are not too far in your development, you may choose to use DataWedge rather than the EMDK & there is a tutorial here if that appeals: Tutorial: Scanning with DataWedge and Xamarin . With DataWedge you would not have had either these issues as it has no library dependencies so your app could have been installed on any Android device.
Thank you for the response. I agree with you that there seems to be some commonality with the four devices with regard to GPS and WAN. However, I don't think I am requiring those features. I do have permissions listed for accessing location and network state but I don't see how those can cause this issue? Below is my complete manifest for you to review. Furthermore, to prove my theory is correct and there is something wrong with the device descriptions in the play store, look at my two screen shots I attached that show the TC70X device details and the TC75X device details. These are taken from the Play store details/decriptions of each device. You can see in the shared libraries section that the TC75X has "com.symbol.emdk" reference where the TC70X does not. I believe this is actually causing the problem.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="2" android:versionName="1.2" package="com.OdenIndustries.PacTracMobile" android:installLocation="auto">
<uses-sdk android:minSdkVersion="23" android:targetSdkVersion="27" />
<uses-permission android:name="com.symbol.emdk.permission.EMDK" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application android:allowBackup="true" android:icon="@drawable/mainapplogo" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme">
<uses-library android:name="com.symbol.emdk" />
Thank you for your sample, I will look into that.
I did look at data wedge a few years back but we opted to not go that route because one, we did not want to rely on another app in order for our app to work properly, it adds another layer and point of failure (plus data wedge had to be configured for what we wanted to do and this caused additional confusion at time). Second reason, data wedge does not give us enough control over the barcode scanner. For example, if we want to have an event that raises when we get a scan so we can pre-process and at times, pause of shut down the barcode scanner, we cannot do those things unless we are using the EMDK.
Interesting... let me do a few tests to understand this a bit more.
Thanks for the feedback on DataWedge
Please remove the following permission and it will work:
<uses-permission android:name="android.permission.SEND_SMS" />
That permission results in the app having the android.hardware.telephony feature, hence why it is not showing as supported on TC70X
I am not sure why there is a difference between declared 'shared libraries' on the device, I'm not sure where that information comes from.
I did a test where I removed the SMS permission as you recommended and I can confirm that it fixed the issue, I now support 10 Zebra devices and the TC70X is one of them! This is good news. I have marked your response as an answer.
I now have a follow up question that is very important. This might be similar to the EMDK proxy that you recommended (which I am still looking at). How would you create your app so that if it is running on a TC75X (or similar) that you would and could have SMS capability but on a device like TC70X, you could still install the app, you just wouldn't have SMS capability. Obviously, based on what we learned so far that I can't put it in the permissions for the manifest in order to have more devices show up, I would leave it out of the manifest but then need to add the permission in at runtime if I detect that I am running on a SMS capable device. I guess that is the high level approach to it?
Also, one more question, is it because of the EMDK permission that only Zebra devices show up? So, related to SMS, I would leave EMDK out of permissions so I can target other devices and then use your proxy sample to still utilize the EMDK at runtime?
Sorry, I am new to all of this and it is very confusing but I almost have the full picture, just missing this last piece above.
You can mark the SMS permission as android:required="false", this StackOverflow post gives a good answer: android - Optional permissions so an app can show on all devices and enable optional features on some? - Stack Overflow
I had not realised that using the EMDK permission caused only Zebra devices to show up(!) But yes, that is the reason. I just tested it and can confirm you can specify android:required="false" for the EMDK permission and EMDK library (remember to mark both as not required in the manifest) and the application can now be deployed on all devices. I have never tried marking the EMDK as optional and using the proxy technique I shared previously but I see no reason why it would not work.