Android10的分区存储

分区存储

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

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

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

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

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

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

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

分区存储目录

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

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

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

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

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

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

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

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

访问公共目录

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

1.MediaStore

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

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

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

(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)中声明适当的权限。例如,如果你想访问外部存储器上的公共目录,你需要添加以下权限:


(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及更高版本中访问公共目录。请注意,访问公共目录可能需要用户的授权,因此你应该在代码中处理授权请求和用户的选择。

网站栏目:Android10的分区存储
网页URL:http://www.csdahua.cn/qtweb/news36/453086.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网