Android 6 上的存储访问有何变化

android

1个回答

写回答

rRNA

2025-06-14 14:00

+ 关注

Android
Android

Android 6.0(Marshmallow)引入了一些重要的变化,以改善应用程序对存储访问的控制和安全性。在此之前,Android应用程序可以自由地访问设备上的所有存储空间,包括外部存储和内部存储。然而,这种宽松的访问权限也导致了一些潜在的安全风险,因此Android 6.0对存储访问进行了严格的管理。

运行时权限

Android 6.0引入了运行时权限模型,这意味着应用程序需要在运行时向用户请求访问设备存储的权限。这样一来,用户可以更好地控制应用程序对其存储空间的访问权限,并且可以根据自己的需求选择是否授予权限。

要请求存储权限,首先需要在AndroidManifest.XML文件中声明所需的权限。例如,如果应用程序需要读取外部存储的权限,可以添加以下代码:

XML

<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE" />

然后,在代码中,可以使用以下方法请求存储权限:

Java

if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)

!= PackageManager.PERMISSION_GRANTED) {

ActivityCompat.requestPermissions(this,

new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},

MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);

}

在请求权限的方法中,需要传入权限名称、请求码和回调方法。当用户响应权限请求时,回调方法将被调用,可以根据用户的响应(授予或拒绝)采取相应的操作。

Scoped Storage

另一个Android 6.0引入的存储访问变化是Scoped Storage。Scoped Storage限制了应用程序对外部存储的直接访问权限,强制应用程序只能访问自己的私有目录和特定的共享目录。

Scoped Storage的目的是保护用户的隐私和数据安全。通过限制应用程序对存储的直接访问权限,可以防止恶意应用程序访问和篡改用户的敏感数据。

使用Scoped Storage进行文件访问

Android 10及更高版本中,Scoped Storage是默认启用的。对于Android 6.0至Android 9.0的设备,Scoped Storage是可选的。在使用Scoped Storage进行文件访问时,应用程序需要遵循一些新的规则和限制。

首先,应用程序只能在自己的私有目录下创建、读取和删除文件。可以使用getExternalFilesDir()方法获取应用程序的私有目录。例如,要在外部存储的私有目录下创建一个文件,可以使用以下代码:

Java

File file = new File(getExternalFilesDir(null), "example.txt");

try {

FileOutputStream fos = new FileOutputStream(file);

fos.write("Hello, World!".getBytes());

fos.close();

} catch (IOException e) {

e.printStackTrace();

}

此外,应用程序还可以通过MediaStore API访问特定的共享目录,如图片、音频和视频。例如,要获取设备上的所有图片,可以使用以下代码:

Java

Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

String[] projection = {MediaStore.Images.Media._ID, MediaStore.Images.Media.DISPLAY_NAME};

String sortOrder = MediaStore.Images.Media.DISPLAY_NAME + " ASC";

Cursor cursor = getcontentResolver().query(uri, projection, null, null, sortOrder);

if (cursor != null) {

while (cursor.moveToNext()) {

String name = cursor.getString(cursor.getcolumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME));

Log.d(TAG, "Image Name: " + name);

}

cursor.close();

}

Android 6.0引入了一些重要的存储访问变化,包括运行时权限和Scoped Storage。运行时权限模型使用户能够更好地控制应用程序对存储空间的访问权限,而Scoped Storage则限制了应用程序对外部存储的直接访问权限。通过遵循这些变化,开发人员可以提高应用程序的安全性,并保护用户的隐私和数据安全。

以上是Android 6上存储访问的变化及其使用方法的介绍。希望这些信息对开发人员在处理存储访问问题时有所帮助。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号