Some of the newer devices coming out from Google do not include an sd card, and it appears they are moving towards this direction.
My question: Is there a way to declare the sd card as a uses-feature to prevent people without an external storage from seeing/downloading the app from Google Play?
I realize this is not the correct way to address the issue, but until i can re-code my apps to anticipate this, I am hoping there is a filtering option in the manifest?
There is no <uses-feature> which does what you want.
What you could do is manually select the devices within your developer dashboard on Google Play. I know this is very inefficient and will probably take a lot of time but it's the only way of achieving exactly what you want.
If you don't want to bother with that then i would recommend that you include this information in your app's description on Google Play and on top of that handle the situation when your application is started up for the first time (for example inform the user that the device is not supported because it has no external storage).
I don't know if such a feature exists, and even if it did it would be difficult to use. I have a Samsung Galaxy Nexus, and while it doesn't have an SD card per-say, it does have 16GB of internal storage. I have seen other phones that say "Internal SD Card" so it really depends on whether that feature (if it exists) can tell the difference between the two. Some devices also have an actual SD card that's hidden from the user, and so they aren't able to tell it's there. Most devices now also have a decent amount of internal storage, so I'm not sure why it's an issue. Do you even need to re-code your application for that? I would think that android would realize that you're requesting storage space that's unavailable and would tell notify the user that they need more storage. All android phones have some amount of internal storage available to the user.
Related
I recently modified all my apps to run on an SD card by specifying
android:installLocation="preferExternal" in the Manifest.xml. They tested out just fine on all my test phones.
It seems like a no-brainer for an app to allow this. But I notice that most of the apps on my phones do not allow running on an SD card. Google Chrome, Google Earth, Dropbox, Google Gmail, GolfNow, etc. In fact none of the Google apps will run on an SD Card.
I'm trying to find out why. What is the downside of running on an SD card?
Thanks,
Dean
This is actually a broad question and you'd really have to ask the developers of those apps to get a definitive answer.
Some ideas...
External storage as it's traditionally known was usually provided by plug in SD cards. An SD card can, of course, be dismounted and/or physically removed by the user meaning none of the apps installed on it will work until it is reinserted.
Certain types of RAM chips have much faster access times than others. Internal RAM on a device might be better suited for processor / computational intensive apps than that of accessing SD cards which tend to have slower access times both at the RAM chip level and also due to having to go through an external bus.
Mission critical apps (depending on the users' defination of what they should be) need to be accessible permanently (see my first point). If a user wants their email to be retrieved at short, fixed intervals, their email app can't be allowed to disappear because the external storage has been dismounted / removed.
There are known problems with some app requirements which cause unpredictable results when the app is installed on an SD card. A classic example is any app which registers a BroadcastReceiver to receive the BOOT_COMPLETED action. Boot completion happens BEFORE various parts of a device are up and running - this includes mounting the SD card. In this scenario, the broadcast is sent but the apps on the SD card aren't running and can't receive it.
As time has gone on, so called 'internal' and 'external' storage definitions have become increasingly blurred - in comparison to several years ago, many Android devices have huge amounts of 'internal' memory making it less important to free up space by installing or moving apps to 'external' storage. Some devices don't even have the ability to add an external SD card and 'external' storage is emulated from a partition on the 'internal' storage.
One other point (tongue in cheek) - perhaps the developers of the apps you mention are egomaniacs and just insist on using up precious 'internal' storage just because they can. ;)
What is the downside of running on an SD card
Depends on the app. If i.e. your app listens to broadcasts, uses Alarm Manager etc. then it must not be on SD card for this to work. If your app is not using any of these, then it simply makes no difference from developer standpoint.
HTC incredible, no SD card only internal memory. my app uses MediaStore.Images.Thumbnails.getThumbail() to retrieve image thumbnails. looking at the code, Thumbnails hard codes the external storage URI in its impl!
worse, MediaStore is final so it can't be extended, and it uses internal SDK calls so it can't be copied.
Is anyone aware of a workaround for this? worst case is I need to factor out what i need from Thumbnails and maintain it myself. highly undesirable.
android Thumbnails.getThumbnail() and phones w/o ext storage
All Android devices with the Android Market have at least 2GB of external storage when they ship. Whether or not that storage is available at any given moment may vary.
HTC incredible, no SD card only internal memory.
The HTC Droid Incredible has external storage. It is not an SD card. External storage does not mean "removable storage", but rather storage that can be mounted by the user as a drive/volume on their desktop or notebook.
my app uses MediaStore.Images.Thumbnails.getThumbail() to retrieve image thumbnails.
One presumes you are encountering problems with this. It is often useful to explain your problem if you expect to get help in resolving it.
looking at the code, Thumbnails hard codes the external storage URI in its impl!
Looking at the code, I'm not seeing where this hard-coding is occurring. There is no reference to sdcard anywhere in MediaStore. Consider in the future using a hyperlink to point to such resources.
worse, MediaStore is final so it can't be extended, and it uses internal SDK calls so it can't be copied.
None of that would do you any good, considering that you cannot replace the MediaStore except via a complete firmware replacement.
is anyone aware of a workaround for this?
Possibly, but since you declined to explain what "this" is, it is impossible to answer your question.
UPDATE based upon comments:
I own an HTC DROID Incredible. /mnt/sdcard/ is user-writeable. I wrote a program that wrote to it. If you know how to program, you might try writing a program that writes to it -- be sure to hold the WRITE_EXTERNAL_STORAGE permission. The permission bits (which are 075 for my /mnt/sdcard/) aren't especially relevant for external storage on Android 1.x/2.x devices AFAIK, because external storage is vfat on those OS versions and therefore do not really honor Linux permissions.
With respect to EXTERNAL_CONTENT_URI, that turns into a content:// Uri, which does not "hard codes the external storage".
A year later it seems that 2.3+ versions of Android no longer use the INTERNAL_CONTENT_URI for user media; existence of an external SD card is irrelevant. Of all android models I have the INTERNAL_CONTENT_URI is only used for system apps, and HTC devices use it for tutorials and other weird media files. All photos and videos taken from the camera, all downloads, and every other media type I've seen will save to the EXTERNAL_CONTENT_URI. I feel confident in saying the INTERNAL_CONTENT_URI can now be completely avoided, and just using the EXTERNAL_CONTENT_URI will retrieve all user media; at least anything that the user will be interested in.
Some devices I've worked with include the HTC Thunderbolt, the HTC Droid DNA, the Galaxy Nexus, and the Samsung Galaxy S3. Samsung devices rarely ever use the INTERNAL_CONTENT_URI, and I have yet to see anything on Nexus devices. The only modern device I've seen that still uses it is HTC devices, but to reiterate and conclude there is absolutely nothing useful to the user stored in the INTERNAL_CONTENT_URI on HTC devices.
Can I store web pages on an Android device that lacks a microSD slot, so I can deliver an offline demo?
I asked a similar question a little while ago, but I assumed the device I was thinking of buying HAD a microSD slot -- but now I'm afraid it might not. The device in question is the Samsung Galaxy Tab 10.1, due out next week. Earlier demo models had a microSD slot, but although the specs are not entirely clear, it looks like the production version might not. If it lacks a microSD slot, will I somehow be able to save the demo in internal memory, or will I be out of luck?
Thanks for your help!
Typically there is a storage space on the device, however it is not really usable. When you plug the device into a computer you are actually storing and accessing files on the sdcard. However if this device does not have an sdcard then there is a high chance that it would allow you to store files on the internal flash storage. You could then access these files to give a demo just like if you had an sdcard.
Looks like the new Galaxy Tab 10.1 comes with between 16 and 32gb of internal flash memory. Though failing to include a MicroSD slot in the first place is unusual, it's highly unlikely that they won't allow you to use some of that 16+GB for your own files. That would mean you'd be unable to copy MP3s to the device via USB, for example, which would annoy a lot of people.
Part or all of the 16+GB should be partitioned and made available for your use.
We are trying to build an application for Android HoneyComb & the application has dependency on SD Card in the sense that we store all our data in /sdcard/ partition.
We decided to go with Xoom as the target-device for testing our application. To our surprise, we found that Xoom doesn't yet support external storage like SD Card & they blame HoneyComb for this. Please check the link below.
http://androidforums.com/xoom-support-troubleshooting/286911-latest-info-sd-card-support.html
can i know technically what exactly is not supported in HoneyComb that makes SD Card feature unavailable?.
Would appreciate any pointers that can lead me to know what exactly is the missing link in HoneyComb w.r.t external storage.
Also, I observed that Android HoneyComb emulator by default supports SD Card (even though its only a virtual SD Card). Then, why devices don't have support for external storage.
please help if you have any technical information. Thanks in advance.
As I understand it, the Android spec for honeycomb only defines the one type of storage for honeycomb type devices, that being the partition at /mnt/sdcard, which is what the getExternalStorageDir() call returns. As such, device manufacturers can and have been mounting additional sdcards as anything they want, and there is no API call to get to that storage.
I need to deliver an app on sd card, and need to make it start automatically after insertion of the card.
What I want to ask is, is this possible to achieve this for the operating systems android, symbian, blackberry and j2me supported phones?
I know that symbian supports pre-installment but how to do auto-start? And on android before version 2.2 non-sd card apps don't supported as i know.
I do not believe you can do this (atleast with my experience with android) without asking for the user's permission. Instead of automatically installing the app, you can start an intent which then asks the user to accept the permissions to install the app. You may also want to look at putting the app on the market (unless it's private) it's only $25 and you can upload an unlimited amount of apps for the rest of your life.
I need to deliver an app on sd card, and need to make it start automatically after insertion of the card.
On Android, that is not possible without custom firmware.
Also, bear in mind that some of those devices do not have SD card slots of any form.