0
点赞
收藏
分享

微信扫一扫

解决Android10存储数据的api的具体操作步骤

Android 10 存储数据的 API

Android 10(API 级别 29)为开发人员提供了一些新的存储 API,以提高应用程序对存储权限的控制和数据的安全性。本文将介绍 Android 10 中存储数据的 API,并提供相应的代码示例。

存储权限变更

在 Android 10 中,存储权限发生了变更。以前,应用程序可以在清单文件中声明 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE 权限,然后可以自由地读写外部存储上的文件。然而,从 Android 10 开始,这些权限只能用于访问应用专属目录之外的共享存储空间。

共享存储空间

Android 10 引入了共享存储空间的概念,即应用程序可以访问其他应用程序创建的文件,而无需获得特定的存储权限。但是,这些文件位于公共目录中,可能会被其他应用程序访问或修改。

获取共享存储空间的目录

可以使用 getExternalStoragePublicDirectory 方法获取共享存储目录的路径。以下是一个示例:

File sharedDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS);
访问共享存储空间的文件

可以通过以下方法在共享存储空间中读取和写入文件:

// 读取文件
try {
    File file = new File(sharedDir, "example.txt");
    FileInputStream fis = new FileInputStream(file);
    // 读取文件内容
    fis.close();
} catch (IOException e) {
    e.printStackTrace();
}

// 写入文件
try {
    File file = new File(sharedDir, "example.txt");
    FileOutputStream fos = new FileOutputStream(file);
    // 写入文件内容
    fos.close();
} catch (IOException e) {
    e.printStackTrace();
}

应用专属目录

应用程序仍然可以在应用专属目录中读写文件,不受存储权限的限制。这些文件只能由应用程序本身访问,其他应用程序无法访问。以下是一个示例:

// 获取应用专属目录的路径
File appDir = getExternalFilesDir(null);

// 读取文件
try {
    File file = new File(appDir, "example.txt");
    FileInputStream fis = new FileInputStream(file);
    // 读取文件内容
    fis.close();
} catch (IOException e) {
    e.printStackTrace();
}

// 写入文件
try {
    File file = new File(appDir, "example.txt");
    FileOutputStream fos = new FileOutputStream(file);
    // 写入文件内容
    fos.close();
} catch (IOException e) {
    e.printStackTrace();
}

Scoped Storage

Android 10 引入了 Scoped Storage,这是一种新的文件存储机制,旨在增强应用程序对存储权限的控制以及数据的安全性。Scoped Storage 限制了应用程序对外部存储的直接访问,而是通过媒体存储库进行操作。

读取媒体文件

读取媒体文件需要使用媒体存储库。以下是一个示例:

// 读取媒体文件
Uri externalUri = 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(externalUri, projection, selection, selectionArgs, sortOrder);

if (cursor != null && cursor.moveToFirst()) {
    do {
        // 处理每个媒体文件
        String id = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media._ID));
        String name = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME));
    } while (cursor.moveToNext());
}

cursor.close();

写入媒体文件

写入媒体文件的方法类似,需要使用媒体存储库来创建一个新的媒体文件,并将数据写入其中。以下是一个示例:

// 写入媒体文件
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DISPLAY_NAME, "example.jpg");
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");

Uri externalUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
Uri newImageUri = getContentResolver().insert(externalUri
举报

相关推荐

0 条评论