Reputation: 24068
In my android app, I save some files to Environment.getExternalStorageDirectory() + "\MyApp"
directory. This worked fine until android 6 marshmallow update. After marshmallow update, I cannot write to this directory.
As described in this answer, in marshmallow, apps need to ask for the permission from user at runtime before writing to external storage.
But, when I use context.getExternalFilesDir(null)
instead of Environment.getExternalStorageDirectory()
, I don't need to ask for any permission at runtime and it just works (path returned from context.getExternalFilesDir(null)
is also inside the external storage directory).
Is this some kind of a coincidence or can I continue to write to context.getExternalFilesDir(null)
without asking permission at runtime?
Upvotes: 10
Views: 3418
Reputation: 11
<uses-permission
android:maxSdkVersion="18"
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
reference: uses-permission-element
Upvotes: 1
Reputation: 1
As i know PERMISSIONS are presented started since Android 6 and above So no need to check permissions for API 16
Upvotes: 0
Reputation: 38121
The documentation states:
Starting in KITKAT, no permissions are required to read or write to the returned path; it's always accessible to the calling app. This only applies to paths generated for package name of the calling application. To access paths belonging to other packages, WRITE_EXTERNAL_STORAGE and/or READ_EXTERNAL_STORAGE are required.
You will have read/write access to getExternalFilesDir()
on Android 4.4+ without requiring any permissions.
I would recommend using a FileProvider if you need to support lower API levels.
Upvotes: 12