Please explain more closely how Google mandated an API that won't let developers read and write to an SD card, when they can.
They can't.
In its simplest explanation, the old method required that a developer requested permission to use the SD Card. Doing so granted broad read/write permissions to the entire SD Card. This means that apps could create folders anywhere and everywhere, to include inside the /android/data subfolders created by other apps. The benefit for the user was that we could use a file manager to access the MicroSD for anything that we wanted. The downside was that apps could mess with the data from other apps, or even do some pretty malicious things.
With the new API, applications that request the permission simply gain broad read access, but zero write access. However, all apps can now write to their app-specific folder without any permission (and this is the part that you bolded). Any application can write ONLY to their specific subfolder within the /android/data folder on the MicroSD. File managers cannot do squat outside of reading the MicroSD and writing to their specific subfolder.
We do now have content providers though. An application can designate something within their subfolder as a "Document," a "Picture," or some other designations. This will allow those the built in file picker (Storage Access Framework, or SAF) to show these as available to be opened/edited by other applications.
So, how does this affect some simple scenarios? In the past, I'd throw some pictures and music onto my SD Card. For pictures, you could view them with any gallery application, and make edits to them. Now, you can view but edits cannot be done (even with the AOSP gallery application built into my phone, despite Google stating that most system apps have this ability left in). For Music, PowerAmp can no longer download custom album art. Keep in mind, this limitation is only for media stored on the SD. It doesn't affect media stored on internal storage.
And therein lies the problem. When you have a 16GB phone and a 64GB MicroSD, the desire is to keep your media on the MicroSD. I used to use FolderSync to keep my media synced from my cloud provider to my MicroSD so that it was available locally for when a high-speed data connection wasn't available. Or, I'd like to swipe through baby photos with a friend at work without waiting for them to load. Can't do that anymore unless I either pre-load it via USB connection (and manually update instead of using cloud synchronization), or store it within my limited internal storage.
They restricted access to SD card shared files after a lot of people complained about security concerns (that I didn't particularly agree with), and now require different calls for access.
Those different calls don't grant the same access as before.
Or am I still just missing the point?
Because it sounds like legacy methods for access are broken, and not access itself.
You have to update your app to the new API if you're a dev, yes?
That's what I initially thought. When I found this problem (being on the first affected device), I had a chance to talk to the developers of Astro, ES File Explorer, Foldersync, and several others. I even loaned my phone to one of them via mail. The first response from them was along the lines of, "this sucks, but thankfully the OEMs aren't doing this!" That was followed by the KitKat leaks for the S4 and the Note 3, and that's when we realized what Google has done.
There are some workarounds on some Samsung phones that have been updated to KitKat (but not the S5, which came with KitKat). The community considers this a bug on Samsung's part and will be fixed in an update, thus closing that loophole. As of now, the only way to completely restore MicroSD read/write access on a broad scale is to root and run an XML fix (
and there's even an app that will do it for you). I want to, however, talk about this part:
Note: Beginning with Android 4.4, the platform no longer requires that your app acquire the WRITE_EXTERNAL_STORAGEor READ_EXTERNAL_STORAGEwhenyouneed to access only your app-specific regions of the external storage using the methods above. However, the permissions are required if you want to access the shareable regions of the external storage, provided by getExternalStoragePublicDirectory().
This is the content provider part that I was talking about. A developer can share part or all of their subfolder by tagging certain files as belonging to a specific content provider, such as images, videos, documents, etc. These then become sharable to other applications. But the entire SD Card outside of /android/date is read only, permanently (except for the Samsung bug on some Touchwiz models). And when I use FolderSync to load media into its MicroSD subfolder, it's blocked by .NOMEDIA and cannot be read by standard galleries. And the galleries that can view hidden files cannot edit because they don't have consent to access those. The reason the developer of FolderSync cannot support SAF is because it doesn't truly create content, it just syncs. A Camera application, for example, can explicitly tell SAF, "Hey, I'm creating an image. Now I'm creating a video. Share these with SAF." Foldersync cannot do this because it has the trust the user, and the typical user is unaware of these things.
I apologize if I failed to convey what's going on here. But the bottom line here is that, in the end, this will be a positive change for the majority of users. However, file managers are basically on their way to becoming extinct. I really wish that I could find the interview link, but one of Google's project managers openly complained about how, "everytime I sneeze another file picker appears," or words along those lines. Google, like Apple, doesn't want you going through folders. They want you to go through content in a more modern and intuitive way. This isn't about killing the MicroSD or pushing cloud services, as some conspiracy nuts might think. It's about security and ease of use for the mainstream users.
Power users like myself need to adapt, and I already have. Nick is still raging against the machine. I was there several months ago. He'll calm down soon, I hope
