Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WRITE_EXTERNAL_STORAGE still required with KitKat?

As mentioned in the documentation, the WRITE_EXTERNAL_STORAGE permission should not be a requirement starting from API level 19. Hence, I've written this to the manifest:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
                 android:maxSdkVersion="18"/>

However, when running my app which uses Google Maps V2 and thus needs access to the external storage, I get a SecurityException:

java.lang.SecurityException: The Maps API requires the additional following permissions to be set in the AndroidManifest.xml to ensure a correct behavior:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

The phone I'm running the app is KitKat (4.4) which is API level 19. To my understanding, the app should be able to run fine without the permission. Why do I get the error anyway?

like image 682
manabreak Avatar asked Oct 20 '22 14:10

manabreak


1 Answers

the WRITE_EXTERNAL_STORAGE permission should not be a requirement starting from API level 19

Only if you are using methods on Context, like getExternalFilesDir(), to get at standard locations on external storage that are specific for your app. For other locations, such as the paths reported by methods on Environment, you still need the permission.

Or, to quote the documentation that you linked to:

For example, beginning with Android 4.4 (API level 19), it's no longer necessary for your app to request the WRITE_EXTERNAL_STORAGE permission when your app wants to write to its own application-specific directories on external storage (the directories provided by getExternalFilesDir()).

Also, third-party libraries are welcome to require that you have this permission for their own reasons.

Why do I get the error anyway?

It looks like MapsV2 is validating that you have the permission as part of its setup process. That is the prerogative of MapsV2. Perhaps they are looking to work with external storage outside of the limited areas that do not require this permission. Perhaps they aren't but failed to update the permission check in their code. MapsV2, being closed source, is difficult to analyze for this sort of thing.

like image 159
CommonsWare Avatar answered Nov 15 '22 07:11

CommonsWare