Android 10的分区存储

移动开发 Android
Android的分区存储机制为应用程序提供了灵活的存储方式,既保护了用户的隐私,又方便了数据的共享和传输。

分区存储

在Android系统中,分区存储是一种用于管理应用程序数据的存储机制。它将设备的存储空间划分为不同的分区,每个分区都有不同的用途和访问权限。

Android分区存储从Android 10(API级别29)开始引入。在此版本之前,Android使用传统的外部存储和内部存储来管理应用程序的文件和数据。从Android 10开始,引入了一种新的存储模型,称为分区存储。

分区存储将应用程序的文件和数据分为两个主要类别:公共存储和私有存储。公共存储是可由多个应用程序访问的共享存储空间,例如照片、视频和音乐等媒体文件。私有存储是每个应用程序独立使用的存储空间,用于存储应用程序的私有文件和数据。

在分区存储模型下,应用程序默认只能访问其私有存储空间,而对于公共存储空间的访问需要进行特殊的权限申请。这样可以增强用户对文件和数据的隐私保护,并提高应用程序的安全性。

需要注意的是,虽然分区存储从Android 10开始引入,但在此之前的版本中仍然可以使用传统的外部存储和内部存储模型。因此,开发者需要根据目标设备的Android版本来选择合适的存储模型。

分区存储的背景是为了提高应用程序的安全性和隐私保护。通过将应用程序的私有数据存储在内部存储中,可以防止其他应用程序对这些数据的访问。而外部存储则提供了一个公共的存储空间,使得应用程序可以方便地共享数据。

总的来说,Android的分区存储机制为应用程序提供了灵活的存储方式,既保护了用户的隐私,又方便了数据的共享和传输。

分区存储目录

在Android 10中,引入了一种新的存储访问模式,称为分区存储。分区存储将应用的文件和数据存储在应用的私有目录中,以增强用户隐私和安全性。以下是Android 10分区存储目录的一些常见路径:

(1) 内部存储私有目录:/data/data/<package_name>/

这是应用的私有目录,只有应用本身可以访问。在这个目录下,应用可以存储私有文件、数据库、缓存等。

(2) 外部存储私有目录:/storage/emulated/0/Android/data/<package_name>/

这是应用的外部存储私有目录,只有应用本身可以访问。在这个目录下,应用可以存储私有文件、数据库、缓存等。

(3) 共享外部存储目录:/storage/emulated/0/

这是设备的共享外部存储目录,所有应用都可以访问。在这个目录下,应用可以存储共享文件、图片、音频、视频等。

需要注意的是,Android 10中的分区存储模式对于访问外部存储的权限有一些限制。应用需要在清单文件中声明相应的权限,并且需要动态请求用户授权才能访问外部存储。这样可以确保用户对于自己的数据有更好的控制权。

访问公共目录

在Android 10及更高版本中,访问公共目录需要使用MediaStore或者Storage Access Framework(SAF)来进行操作。SAF提供了一种标准的方式来访问设备上的公共文件,以增强用户的隐私和安全性。

1.MediaStore

使用「MediaStore」来访问公共数据。MediaStore是一个提供对多媒体文件(如图片、音频、视频)和其他文件(如文档)的访问的内容提供者。以下是使用MediaStore访问公共数据的步骤:

(1) 添加权限:在AndroidManifest.xml文件中添加以下权限:

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

这将允许应用程序读取外部存储器上的媒体文件。

(2) 查询公共数据:使用ContentResolver查询MediaStore来获取公共数据。例如,要查询所有的图片,可以使用以下代码:

Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String[] projection = {MediaStore.Images.Media._ID, MediaStore.Images.Media.DISPLAY_NAME};
String selection = null;
String[] selectionArgs = null;
String sortOrder = null;

Cursor cursor = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);
if (cursor != null && cursor.moveToFirst()) {
    do {
        // 处理每个图片的逻辑
        String id = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media._ID));
        String displayName = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME));
        // ...
    } while (cursor.moveToNext());
    cursor.close();
}

这将返回一个包含图片的Cursor对象,然后可以遍历Cursor来处理每个图片的逻辑。

(3) 处理数据:根据需要处理查询到的数据。例如,可以使用图片的ID来获取其内容URI,并显示图片:

Uri imageUri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, Long.parseLong(id));
imageView.setImageURI(imageUri);

这将使用图片的内容URI来设置ImageView的图片。

根据需要,可以使用不同的MediaStore类来访问其他类型的公共数据,如音频、视频或文档。

2.SAF

以下是使用「SAF」访问公共数据的步骤:

(1) 请求访问权限:首先,你需要在应用的清单文件(AndroidManifest.xml)中声明适当的权限。例如,如果你想访问外部存储器上的公共目录,你需要添加以下权限:

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

(2) 启动SAF:当你需要访问公共目录时,你可以使用Intent启动SAF。例如,如果你想让用户选择一个文件,你可以使用以下代码:

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
startActivityForResult(intent, REQUEST_CODE);

(3) 处理返回结果:当用户选择了一个文件后,你可以在onActivityResult方法中处理返回的结果。你可以通过data.getData()方法获取所选文件的URI。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
        Uri uri = data.getData();
        // 在这里处理所选文件的URI
    }
}

通过以上步骤,你可以在Android 10及更高版本中访问公共目录。请注意,访问公共目录可能需要用户的授权,因此你应该在代码中处理授权请求和用户的选择。

责任编辑:赵宁宁 来源: 沐雨花飞蝶
相关推荐

2010-03-02 15:35:41

Linux硬盘分区

2021-04-14 10:38:49

Windows 10Windows微软

2010-03-02 14:57:18

Linux文件系统

2012-09-19 15:22:36

Exchange存储

2017-05-22 20:29:29

Windows 10Windows分区方法

2021-11-26 21:22:07

Windows 10Windows微软

2017-08-30 16:59:54

PostgreSQL分区表

2018-01-08 08:38:00

2018-09-06 13:10:12

Windows 10Windows磁盘分区

2014-08-26 10:51:44

数据存储

2014-08-26 10:04:51

数据存储

2010-02-02 13:05:25

存储交换机

2015-09-09 15:54:00

mhddfs分区Linux

2019-08-20 15:55:14

Windows 10EFI分区Windows

2019-01-15 14:29:43

Windows 10分区USB驱动器

2010-01-13 16:29:00

FC存储交换机

2017-08-09 08:56:04

SP存储Android

2017-12-18 08:21:46

存储业界动态

2017-12-07 10:23:41

盘点存储公司

2010-01-20 09:33:12

光纤存储交换机
点赞
收藏

51CTO技术栈公众号