diff options
| author | 2017-07-21 23:11:15 +0000 | |
|---|---|---|
| committer | 2017-07-21 23:11:15 +0000 | |
| commit | cde37c8836e935fddd236d61138fd3955d26a14b (patch) | |
| tree | 68497625bea321ca18dd1d51e1496638d26a9f51 | |
| parent | 0f18557df8280ff27d946ffe87974e92f8091781 (diff) | |
| parent | e4d05573348e2177b1a0561c8900e17a1e92ead4 (diff) | |
Merge "Docs: Updates guidance about using permissions when accessing OBB expansion files, Bug: 34273998 Test: Ran "make" to verify error-free building." into oc-dev
am: e4d0557334
Change-Id: If97a3685c4e55ca006d1876a0378a772bf784c2d
| -rw-r--r-- | core/java/android/content/Context.java | 52 |
1 files changed, 43 insertions, 9 deletions
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index 6c62f5e4782c..48fa3a8d60b8 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -127,8 +127,8 @@ public abstract class Context { * File creation mode: allow all other applications to have read access to * the created file. * <p> - * As of {@link android.os.Build.VERSION_CODES#N} attempting to use this - * mode will throw a {@link SecurityException}. + * Starting from {@link android.os.Build.VERSION_CODES#N}, attempting to use this + * mode throws a {@link SecurityException}. * * @deprecated Creating world-readable files is very dangerous, and likely * to cause security holes in applications. It is strongly @@ -147,7 +147,7 @@ public abstract class Context { * File creation mode: allow all other applications to have write access to * the created file. * <p> - * As of {@link android.os.Build.VERSION_CODES#N} attempting to use this + * Starting from {@link android.os.Build.VERSION_CODES#N}, attempting to use this * mode will throw a {@link SecurityException}. * * @deprecated Creating world-writable files is very dangerous, and likely @@ -1127,13 +1127,47 @@ public abstract class Context { * </ul> * <p> * Starting in {@link android.os.Build.VERSION_CODES#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, - * {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} and/or - * {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} are required. + * are required to read or write to the path that this method returns. + * However, starting from {@link android.os.Build.VERSION_CODES#M}, + * to read the OBB expansion files, you must declare the + * {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} permission in the app manifest and ask for + * permission at runtime as follows: + * </p> + * <p> + * {@code <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" + * android:maxSdkVersion="23" />} + * </p> * <p> + * Starting from {@link android.os.Build.VERSION_CODES#N}, + * {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} + * permission is not required, so don’t ask for this + * permission at runtime. To handle both cases, your app must first try to read the OBB file, + * and if it fails, you must request + * {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} permission at runtime. + * </p> + * + * <p> + * The following code snippet shows how to do this: + * </p> + * + * <pre> + * File obb = new File(obb_filename); + * boolean open_failed = false; + * + * try { + * BufferedReader br = new BufferedReader(new FileReader(obb)); + * open_failed = false; + * ReadObbFile(br); + * } catch (IOException e) { + * open_failed = true; + * } + * + * if (open_failed) { + * // request READ_EXTERNAL_STORAGE permission before reading OBB file + * ReadObbFileWithPermission(); + * } + * </pre> + * * On devices with multiple users (as described by {@link UserManager}), * multiple users may share the same OBB storage location. Applications * should ensure that multiple instances running under different users don't |