随着安卓10版本的发布,相比之前的版本,文件管理器的使用和开发产生了一些变化。本文将介绍安卓10后如何开发文件管理器,包括其原理和详细介绍。
1.原理
在安卓10中,Google引入了存储访问框架(SAF),该框架提供了一个标准化的API,用于访问各种不同的存储提供程序,如设备存储和云服务。文件管理器应该使用存储访问框架来向用户呈现他们的文件,并进行文件的管理和操作。
使用存储访问框架,开发人员可以创建Storage Access Framework(SAF)指定的文档提供程序,使其他应用程序或用户可以从中获取或保存文档。文档提供程序必须符合一组标准接口约定,以便与文件选择器对话框和系统文件管理器等框架组件交互。以下是文档提供程序的基本构成:
1. 根:一种文档对象,它是整个存储系统的起点。
2. 文档:一种文档对象,它是用户和其他应用程序交互的主要工具。
3. 目录:一种文档对象,它是文档以及其他目录的容器。
文档提供程序必须实现以下接口:
1. DocumentsProvider:用于提供整个文档集合的根目录
2. Document:用于表示每个单独的文档或目录。
在此基础上,我们可以通过实现DocumentsProvider接口来创建文档提供程序,以便在Android系统的文件管理器和其他应用程序中使用。
2.详细介绍
以下是开发文件管理器的详细步骤:
## 步骤一:创建DocumentsProvider
创建DocumentsProvider类,对根目录的访问和返回文档进行管理。这里实现的DocumentsProvider必须要实现以下方法:
```java
public final Cursor query(...) {...}
public final int update(...) {...}
public final String getType(...) {...}
public final Uri insert(...) {...}
public final int delete(...) {...}
public final ParcelFileDescriptor openDocument(...) throws FileNotFoundException {...}
```
## 步骤二:添加Metadata信息
在DocumentsProvider中添加Metadata信息,包括根目录和文档,以便在使用文件选择器时显示。
```java
android:name=".MyDocumentsProvider" android:authorities="com.mycompany.sample.documents" android:exported="true" android:grantUriPermissions="true" android:permission="android.permission.MANAGE_DOCUMENTS"> android:name="android.provider.extra.LOCAL_ONLY" android:value="true" /> android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths" />
```
## 步骤三:定义根目录和文档
在DocumentsProvider中定义根目录和文档,用于管理和操作文件。
```java
@Override
public Cursor queryRoots(String[] projection) throws FileNotFoundException {
MatrixCursor result = new MatrixCursor(projection != null ? projection :
DEFAULT_ROOT_PROJECTION);
MatrixCursor.RowBuilder row = result.newRow();
...
return result;
}
@Override
public Cursor queryChildDocuments(String parentDocumentId, String[] projection, String sortOrder) throws FileNotFoundException {
MatrixCursor result = new MatrixCursor(projection != null ? projection :
DEFAULT_DOCUMENT_PROJECTION);
MatrixCursor.RowBuilder row = result.newRow();
...
return result;
}
```
## 步骤四:实现文件操作
在DocumentsProvider中实现文件操作,包括文件创建、删除、重命名、移动等。
```java
@Override
public String createDocument(String parentDocumentId, String mimeType, String displayName) throws FileNotFoundException {
...
}
@Override
public void deleteDocument(String documentId) throws FileNotFoundException {
...
}
@Override
public String renameDocument(String documentId, String displayName) throws FileNotFoundException {
...
}
@Override
public void moveDocument(String documentId, String newParentDocumentId) throws FileNotFoundException {
...
}
```
## 步骤五:添加文件权限
添加文件权限,对外提供文件操作的访问。
```xml
android:name="com.mycompany.sample.documents.PERMISSION" android:protectionLevel="signature" /> ``` 通过以上步骤,我们就实现了一个基本的文件管理器。在实际应用中,还可以添加更多的功能和特性,如文件搜索、排序、筛选等。 总结 在安卓10版本中,文件管理器的开发原理和方法发生了改变。使用存储访问框架和DocumentsProvider接口,开发人员可以创建一个完整的文件管理器应用程序,从而实现文件的管理和操作。但是,具体实现需要注意许多细节和技巧,仅靠这篇文章可能难以完全掌握。如果您对此有所兴趣,可以进一步查阅相关的开发文档或学习更多的Android开发知识。