Lahiru Chandima
Lahiru Chandima

Reputation: 24068

Do I need runtime permission check to write into getExternalFilesDir() path in marshmallow?

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

Answers (3)

Fan Wu
Fan Wu

Reputation: 11

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

reference: uses-permission-element

Upvotes: 1

lelic.dev
lelic.dev

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

Jared Rummler
Jared Rummler

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

Related Questions