Android 文件存储框架是如何工作的?

1、

Android 文件存储框架是如何工作的?

简介:Android的文件存储框架(Storage Access Framework,简称SAF)是在Android 4.4(API级别19)引入的一种机制,旨在简化用户在多个文档提供程序之间浏览和访问文件的过程,它通过一个统一的界面,让用户可以方便地从各种存储服务中选择和管理文件。

组成:SAF主要由三部分组成:文档提供程序客户端应用和选择器,文档提供程序是一个Content Provider,负责管理文件并提供访问接口;客户端应用是调用SAF功能的应用;选择器是一个系统界面,用于展示可供用户选择的文件列表。

优势:SAF提供了一种统一的方式来访问文件,无论是本地存储还是云存储服务,用户都可以通过相同的界面进行操作,SAF还支持多用户账户和临时根目录,提高了系统的灵活性和安全性。

2、文档提供程序

定义:文档提供程序是一个Content Provider,继承自DocumentsProvider类,用于管理和提供文件访问接口,它可以封装不同的存储服务,如本地存储或云存储。

架构:文档提供程序的数据结构基于传统的文件层次结构,每个提供程序有一个或多个Root节点,每个Root节点下有若干文档,这些文档可以是文件或文件夹,具有唯一的COLUMN_DOCUMENT_ID来标识。

实现:开发者需要创建一个继承自DocumentsProvider的类,并实现必要的方法,如query()、insert()、update()和delete()等,通过这些方法,客户端应用可以对文件进行增删改查操作。

示例:以下是一个简单文档提供程序的代码示例:

     public class MyDocumentsProvider extends DocumentsProvider {
         @Override
         public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
             // 实现查询逻辑
             return null;
         }
         @Override
         public Uri insert(Uri uri, ContentValues values) {
             // 实现插入逻辑
             return null;
         }
         @Override
         public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
             // 实现更新逻辑
             return 0;
         }
         @Override
         public int delete(Uri uri, String selection, String[] selectionArgs) {
             // 实现删除逻辑
             return 0;
         }
     }

3、客户端应用

使用方式:客户端应用通过调用ACTION_OPEN_DOCUMENT或ACTION_CREATE_DOCUMENT等Intent来启动SAF选择器,从而让用户选择文件,选择完成后,客户端应用会收到一个包含所选文件URI的结果。

打开文件:以下是一个打开文件的示例代码:

Android 文件存储框架是如何工作的?

     private static final int READ_REQUEST_CODE = 42;
     public void openFile() {
         Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
         intent.addCategory(Intent.CATEGORY_OPENABLE);
         intent.setType("image/*");
         startActivityForResult(intent, READ_REQUEST_CODE);
     }
     @Override
     protected void onActivityResult(int requestCode, resultCode, Intent data) {
         if (requestCode == READ_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
             if (data != null) {
                 Uri uri = data.getData();
                 // 处理文件URI
             }
         }
     }

创建文件:以下是一个创建文件的示例代码:

     private static final int WRITE_REQUEST_CODE = 43;
     public void createFile() {
         Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
         intent.addCategory(Intent.CATEGORY_OPENABLE);
         intent.setType("text/plain");
         intent.putExtra(Intent.EXTRA_TITLE, "example.txt");
         startActivityForResult(intent, WRITE_REQUEST_CODE);
     }
     @Override
     protected void onActivityResult(int requestCode, resultCode, Intent data) {
         if (requestCode == WRITE_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
             if (data != null) {
                 Uri uri = data.getData();
                 // 处理新创建的文件URI
             }
         }
     }

4、选择器

作用:选择器是一种系统界面,允许用户从所有已注册的文档提供程序中选择文件,选择器会根据客户端应用传递的Intent参数显示符合条件的文件列表。

使用方式:客户端应用通过启动一个带有ACTION_OPEN_DOCUMENT或ACTION_CREATE_DOCUMENT等Action的Intent来触发选择器,选择器会自动处理文件的选择过程,并在用户完成选择后将结果返回给客户端应用。

示例:以下是一个使用选择器的示例代码:

     private void openFilePicker() {
         Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
         intent.addCategory(Intent.CATEGORY_OPENABLE);
         intent.setType("*/*");
         startActivityForResult(intent, PICK_FILE);
     }
     @Override
     protected void onActivityResult(int requestCode, resultCode, Intent data) {
         if (requestCode == PICK_FILE && resultCode == Activity.RESULT_OK) {
             if (data != null) {
                 Uri uri = data.getData();
                 // 处理选择的文件URI
             }
         }
     }

相关问题与解答

问题1:如何在Android中使用SAF打开文件?

答:在Android中使用SAF打开文件的步骤如下:

1、创建一个Intent,设置Action为Intent.ACTION_OPEN_DOCUMENT。

2、根据需要添加Category和Type,例如Intent.CATEGORY_OPENABLE和"image/*"。

3、使用startActivityForResult()方法启动Intent。

4、在onActivityResult()方法中处理返回的结果,获取选中的文件URI。

Android 文件存储框架是如何工作的?

示例代码如下:

private static final int READ_REQUEST_CODE = 42;
public void openFile() {
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("image/*");
    startActivityForResult(intent, READ_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, resultCode, Intent data) {
    if (requestCode == READ_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
        if (data != null) {
            Uri uri = data.getData();
            // 处理文件URI
        }
    }
}

问题2:如何在Android中使用SAF创建文件?

答:在Android中使用SAF创建文件的步骤如下:

1、创建一个Intent,设置Action为Intent.ACTION_CREATE_DOCUMENT。

2、根据需要添加Category和Type,例如Intent.CATEGORY_OPENABLE和"text/plain"。

3、使用putExtra()方法设置文件的标题。

4、使用startActivityForResult()方法启动Intent。

5、在onActivityResult()方法中处理返回的结果,获取新创建的文件URI。

示例代码如下:

private static final int WRITE_REQUEST_CODE = 43;
public void createFile() {
    Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("text/plain");
    intent.putExtra(Intent.EXTRA_TITLE, "example.txt");
    startActivityForResult(intent, WRITE_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, resultCode, Intent data) {
    if (requestCode == WRITE_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
        if (data != null) {
            Uri uri = data.getData();
            // 处理新创建的文件URI
        }
    }
}

到此,以上就是小编对于“android文件存储框架”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/627731.html

Like (0)
Donate 微信扫一扫 微信扫一扫
K-seo的头像K-seoSEO优化员
Previous 2024-11-05 11:06
Next 2024-11-05 11:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入