Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
1033ce1e
D
Docs
项目概览
OpenHarmony
/
Docs
接近 2 年 前同步成功
通知
159
Star
292
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
1033ce1e
编写于
4月 21, 2023
作者:
Z
zengyawen
1
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update docs
Signed-off-by:
N
zengyawen
<
zengyawen1@huawei.com
>
上级
031eae1d
变更
15
隐藏空白更改
内联
并排
Showing
15 changed file
with
76 addition
and
85 deletion
+76
-85
zh-cn/application-dev/file-management/app-file-access.md
zh-cn/application-dev/file-management/app-file-access.md
+1
-0
zh-cn/application-dev/file-management/app-file-upload-download.md
...plication-dev/file-management/app-file-upload-download.md
+5
-3
zh-cn/application-dev/file-management/app-sandbox-directory.md
.../application-dev/file-management/app-sandbox-directory.md
+8
-5
zh-cn/application-dev/file-management/dev-user-file-manager.md
.../application-dev/file-management/dev-user-file-manager.md
+4
-5
zh-cn/application-dev/file-management/distributed-fs-overview.md
...pplication-dev/file-management/distributed-fs-overview.md
+13
-15
zh-cn/application-dev/file-management/file-access-across-devices.md
...ication-dev/file-management/file-access-across-devices.md
+0
-4
zh-cn/application-dev/file-management/file-management-overview.md
...plication-dev/file-management/file-management-overview.md
+1
-0
zh-cn/application-dev/file-management/manage-external-storage.md
...pplication-dev/file-management/manage-external-storage.md
+2
-4
zh-cn/application-dev/file-management/save-user-file.md
zh-cn/application-dev/file-management/save-user-file.md
+8
-12
zh-cn/application-dev/file-management/select-user-file.md
zh-cn/application-dev/file-management/select-user-file.md
+12
-15
zh-cn/application-dev/file-management/send-file-to-app-sandbox.md
...plication-dev/file-management/send-file-to-app-sandbox.md
+7
-7
zh-cn/application-dev/file-management/set-security-label.md
zh-cn/application-dev/file-management/set-security-label.md
+2
-2
zh-cn/application-dev/file-management/share-app-file.md
zh-cn/application-dev/file-management/share-app-file.md
+3
-3
zh-cn/application-dev/file-management/user-file-overview.md
zh-cn/application-dev/file-management/user-file-overview.md
+2
-2
zh-cn/application-dev/media/audio-call-development.md
zh-cn/application-dev/media/audio-call-development.md
+8
-8
未找到文件。
zh-cn/application-dev/file-management/app-file-access.md
浏览文件 @
1033ce1e
...
...
@@ -138,6 +138,7 @@ async function readWriteFileWithStream() {
```
> **说明:**
>
> 使用流接口时,需注意流的及时关闭。同时流的异步接口应严格遵循异步接口使用规范,避免同步、异步接口混用。流接口不支持并发读写。
### 查看文件列表
...
...
zh-cn/application-dev/file-management/app-file-upload-download.md
浏览文件 @
1033ce1e
...
...
@@ -7,8 +7,9 @@
开发者可以使用上传下载模块(
[
ohos.request
](
../reference/apis/js-apis-request.md
)
)的上传接口将本地文件上传。文件上传过程使用系统服务代理完成。
> **说明:**
>
> 当前上传应用文件功能,仅支持上传应用缓存文件路径(cacheDir)下的文件。
>
>
> 使用上传下载模块,需[申请相关权限](../security/accesstoken-guidelines.md):ohos.permission.INTERNET。
以下示例代码演示了如何将应用缓存文件路径下的文件上传至网络服务器。
...
...
@@ -64,13 +65,14 @@ try {
开发者可以使用上传下载模块(
[
ohos.request
](
../reference/apis/js-apis-request.md
)
)的下载接口将网络资源文件下载到应用文件目录。对已下载的网络资源文件,开发者可以使用基础文件IO接口(
[
ohos.file.fs
](
../reference/apis/js-apis-file-fs.md
)
)对其进行访问,使用方式与
[
应用文件访问
](
app-file-access.md
)
一致。文件下载过程使用系统服务代理完成。
> **说明:**
>
> 当前网络资源文件仅支持下载至应用文件目录。
>
>
> 使用上传下载模块,需[申请相关权限](../security/accesstoken-guidelines.md):ohos.permission.INTERNET。
以下示例代码演示了如何将网络资源文件下载到应用文件目录:
```
```
ts
// pages/xxx.ets
// 将网络资源文件下载到应用文件目录并读取一段内容
import
common
from
'
@ohos.app.ability.common
'
;
...
...
zh-cn/application-dev/file-management/app-sandbox-directory.md
浏览文件 @
1033ce1e
...
...
@@ -10,7 +10,8 @@
下图展示了应用沙箱下,应用可访问的文件范围和方式。
**图1**
应用沙箱文件访问关系图
**图1**
应用沙箱文件访问关系图

## 应用沙箱目录与应用沙箱路径
...
...
@@ -23,7 +24,8 @@
-
从实际物理路径推导物理路径与沙箱路径并不是1:1的映射关系,沙箱路径总是少于系统进程视角可见的物理路径。有些调试进程视角下的物理路径在对应的应用沙箱目录是无法找到的,而沙箱路径总是能够找到其对应的物理路径。
**图2**
应用沙箱路径(不同权限与角色的进程下可见的文件路径不同)
**图2**
应用沙箱路径(不同权限与角色的进程下可见的文件路径不同)

## 应用文件目录与应用文件路径
...
...
@@ -34,7 +36,8 @@
在此主要介绍应用文件目录,如下图所示。应用文件目录下某个文件或某个具体目录的路径称为应用文件路径。应用文件目录下的各个文件路径,具备不同的属性和特征。
**图3**
应用文件目录结构图
**图3**
应用文件目录结构图

1.
一级目录data/:代表应用文件目录。
...
...
@@ -54,14 +57,14 @@
Context上下文获取及上述应用文件路径的获取,详见
[
应用上下文Context
](
../application-models/application-context-stage.md
)
。
> **说明:**
>
> - 禁止直接使用上图中四级目录之前的目录名组成的路径字符串,否则可能导致后续应用版本因应用文件路径变化导致不兼容问题。
>
> - 应通过Context属性获取应用文件路径,包括但不限于上图中绿色背景的路径。
应用文件路径具体说明及生命周期如下表所示。
**表1**
应用文件路径详细说明
| 目录名 | Context属性名称 | 类型 | 说明 |
| -------- | -------- | -------- | -------- |
| bundle | bundleCodeDir | 安装文件路径 | 应用安装后的app的hap资源包所在目录;随应用卸载而清理。不能拼接路径访问资源文件,请使用
[
资源管理接口
](
../reference/apis/js-apis-resource-manager.md
)
访问资源。 |
...
...
zh-cn/application-dev/file-management/dev-user-file-manager.md
浏览文件 @
1033ce1e
...
...
@@ -14,11 +14,11 @@ OpenHarmony预置了FileManager文件管理器。系统应用开发者也可以
> **说明:**
>
> ohos.permission.FILE_ACCESS_MANAGER是使用文件访问框架接口的基础权限。
>
>
> ohos.permission.GET_BUNDLE_INFO_PRIVILEGED权限可以用于查询系统内当前支持的文件管理服务端应用信息。
2.
导入依赖模块。
```
ts
import
fileAccess
from
'
@ohos.file.fileAccess
'
;
import
fileExtensionInfo
from
'
@ohos.file.fileExtensionInfo
'
;
...
...
@@ -30,7 +30,7 @@ OpenHarmony预置了FileManager文件管理器。系统应用开发者也可以
开发者可以获取当前系统所有文件管理服务端管理的设备属性,也可以获取某个文件管理服务端管理的设备属性。应用开发者可以按需过滤设备。
在文件访问框架中,使用RootInfo用于表示设备的属性信息。以下示例可以获取所有设备的RootInfo。
```
ts
// 创建连接系统内所有文件管理服务端的helper对象
let
fileAccessHelperAllServer
=
null
;
...
...
@@ -71,7 +71,7 @@ OpenHarmony预置了FileManager文件管理器。系统应用开发者也可以
在文件访问框架中,使用FileInfo表示一个文件(目录)的基础信息。开发者可以使用listfile接口遍历下一级所有文件(目录)的迭代器对象;也可以通过scanfile过滤指定目录,获取满足条件的迭代器对象。
listfile和scanfile接口当前支持RootInfo对象调用,可用于支撑遍历下一级文件或过滤整个目录树。同时,接口也支持FileInfo对象调用,用于支撑遍历下一级文件或过滤指定目录。
```
ts
// 从根目录开始
let
rootInfo
=
rootinfos
[
0
];
...
...
@@ -123,7 +123,6 @@ OpenHarmony预置了FileManager文件管理器。系统应用开发者也可以
5.
操作文件或目录。
开发者可以集成文件访问框架的接口,完成一些用户行为,比如删除文件(目录)、重命名文件(目录)、新建文件(目录)、移动文件(目录)等。以下示例展示了如何创建一个文件,其他接口请参见
[
API参考
](
../reference/apis/js-apis-fileAccess.md
)
。
```
ts
// 以本地设备为例
// 创建文件
...
...
zh-cn/application-dev/file-management/distributed-fs-overview.md
浏览文件 @
1033ce1e
...
...
@@ -8,10 +8,8 @@
-
户外拍摄的照片,回家打开平板直接访问原设备拍摄的照片。
hmdfs在分布式软总线动态组网的基础上,为网络上各个设备结点提供一个全局一致的访问视图,支持开发者通过基础文件系统接口进行读写访问,具有高性能、低延时等优点。
## 分布式文件系统架构

...
...
@@ -20,22 +18,22 @@ hmdfs在分布式软总线动态组网的基础上,为网络上各个设备结
-
hmdfs:实现在内核的网络文件系统,包括缓存管理、文件访问、元数据管理和冲突管理等。
-
缓存管理
-
设备分布式组网后,hmdfs提供文件的互访能力,但不会主动进行文件数据传输和拷贝。如果应用需要将数据保存到本地,需主动拷贝。
-
hmdfs保证Close-to-Open的一致性,即一端写关闭后,另外一端可以读取到最新数据,不保证文件内容的实时一致性。
-
数据在远端写入,但是由于网络原因未及时回刷,文件系统会在下次网络接入时回刷本地,但是如果远端已修改则无法回刷。
-
设备分布式组网后,hmdfs提供文件的互访能力,但不会主动进行文件数据传输和拷贝。如果应用需要将数据保存到本地,需主动拷贝。
-
hmdfs保证Close-to-Open的一致性,即一端写关闭后,另外一端可以读取到最新数据,不保证文件内容的实时一致性。
-
数据在远端写入,但是由于网络原因未及时回刷,文件系统会在下次网络接入时回刷本地,但是如果远端已修改则无法回刷。
-
文件访问
-
文件访问接口与本地一致(
[
ohos.file.fs
](
../reference/apis/js-apis-file-fs.md
)
)。
-
如果文件在本地,则堆叠访问本地文件系统。
-
如果文件在其他设备,则同步网络访问远端设备文件。
-
文件访问接口与本地一致(
[
ohos.file.fs
](
../reference/apis/js-apis-file-fs.md
)
)。
-
如果文件在本地,则堆叠访问本地文件系统。
-
如果文件在其他设备,则同步网络访问远端设备文件。
> **说明:**
>
> symlink:不支持。
-
元数据管理
-
分布式组网下,文件一端创建、删除、修改,另一端可以“立即”查看到最新文件,看到速度取决于网络情况。
-
远端设备离线后,该设备数据将不再在本端设备呈现。但由于设备离线的感知具有延迟,可能会造成部分消息4s超时,因此开发者需要考虑接口的网络超时或一些文件虽然可以看到,但实际设备可能已离线的场景。
-
分布式组网下,文件一端创建、删除、修改,另一端可以“立即”查看到最新文件,看到速度取决于网络情况。
-
远端设备离线后,该设备数据将不再在本端设备呈现。但由于设备离线的感知具有延迟,可能会造成部分消息4s超时,因此开发者需要考虑接口的网络超时或一些文件虽然可以看到,但实际设备可能已离线的场景。
-
冲突处理
-
本地与远端冲突 ,远端文件被重命名,看到的同名文件是本地同名文件,远端文件被重命名。
-
远端多个设备冲突,以接入本设备ID为顺序,显示设备ID小的同名文件,其他文件被依次重命名。
-
如果组网场景,目录树下已经有远端文件,创建同名文件,提示文件已存在。
-
冲突文件显示_conflict_dev后依次加id,id从1自动递增。
-
同名目录之间仅融合不存在冲突,文件和远端目录同名冲突,远端目录后缀加_remote_directory。
-
本地与远端冲突 ,远端文件被重命名,看到的同名文件是本地同名文件,远端文件被重命名。
-
远端多个设备冲突,以接入本设备ID为顺序,显示设备ID小的同名文件,其他文件被依次重命名。
-
如果组网场景,目录树下已经有远端文件,创建同名文件,提示文件已存在。
-
冲突文件显示_conflict_dev后依次加id,id从1自动递增。
-
同名目录之间仅融合不存在冲突,文件和远端目录同名冲突,远端目录后缀加_remote_directory。
zh-cn/application-dev/file-management/file-access-across-devices.md
浏览文件 @
1033ce1e
# 跨设备文件访问
分布式文件系统为应用提供了跨设备文件访问的能力,开发者在多个设备安装同一应用时,通过
[
基础文件接口
](
app-file-access.md
)
,可跨设备读写其他设备该应用分布式文件路径(/data/storage/el2/distributedfiles/)下的文件。例如:多设备数据流转的场景,设备组网互联之后,设备A上的应用可访问设备B同应用分布式路径下的文件,当期望应用文件被其他设备访问时,只需将文件移动到分布式文件路径即可。
## 开发步骤
1.
完成分布式组网。
...
...
@@ -14,7 +12,6 @@
设备A上在分布式路径下创建测试文件,并写入内容。示例中的context的获取方式请参见
[
获取UIAbility的上下文信息
](
../application-models/uiability-usage.md#获取uiability的上下文信息
)
。
```
ts
import
fs
from
'
@ohos.file.fs
'
;
...
...
@@ -38,7 +35,6 @@
设备B上在分布式路径下读取测试文件。
```
ts
import
fs
from
'
@ohos.file.fs
'
;
...
...
zh-cn/application-dev/file-management/file-management-overview.md
浏览文件 @
1033ce1e
...
...
@@ -21,4 +21,5 @@
-
[
分布式文件系统
](
distributed-fs-overview.md
)
:提供跨设备的文件访问能力。所谓跨设备,指文件不一定存储在本地设备或外置存储设备,而是通过计算机网络与其他分布式设备相连。
**图1**
文件分类模型示意图

zh-cn/application-dev/file-management/manage-external-storage.md
浏览文件 @
1033ce1e
...
...
@@ -5,6 +5,7 @@
外置存储设备的管理由StorageManager和StorageDaemon两个服务完成。StorageDaemon实现底层的的监听挂载等功能;StorageManager则对系统应用提供状态变更通知、查询和管理能力。
**图1**
外置存储设备管理示意图

-
插入外卡时,StorageDaemon进程通过netlink监听获取到外卡插入事件,创建对应的磁盘设备以及卷设备,此时,已创建的卷设备状态为卸载状态(UNMOUNTED)。
...
...
@@ -19,7 +20,6 @@
-
当卷设备处于卸载状态时,拔出卷设备会删除相关卷设备信息,并发送COMMON_EVENT_VOLUME_REMOVED广播。
## 接口说明
外置存储设备管理相关API的详细介绍请参见
[
API参考
](
../reference/apis/js-apis-file-volumemanager.md
)
。
...
...
@@ -36,7 +36,6 @@
| usual.event.data.VOLUME_BAD_REMOVAL | id:卷设备ID
<br/>
diskId:卷设备所属磁盘设备ID |
| usual.event.data.VOLUME_EJECT | id:卷设备ID
<br/>
diskId:卷设备所属磁盘设备ID
<br/>
volumeState:卷设备状态 |
## 开发步骤
开发者通过订阅卷设备相关的广播事件来感知外置存储的插入,通过广播传递的信息获取卷设备信息后可以对卷设备进行查询以及管理操作。
...
...
@@ -53,7 +52,6 @@
-
卷设备异常移除:"usual.event.data.VOLUME_BAD_REMOVAL"
-
卷设备正在弹出:"usual.event.data.VOLUME_EJECT"
```
ts
import
CommonEvent
from
'
@ohos.commonEventManager
'
;
import
volumeManager
from
'
@ohos.file.volumeManager
'
;
...
...
@@ -71,7 +69,7 @@
```
3.
收到广播通知后获取卷设备信息。
```
ts
CommonEvent
.
subscribe
(
subscriber
,
function
(
err
,
data
)
{
if
(
data
.
event
===
'
usual.event.data.VOLUME_MOUNTED
'
)
{
...
...
zh-cn/application-dev/file-management/save-user-file.md
浏览文件 @
1033ce1e
...
...
@@ -8,13 +8,13 @@
## 保存图片或视频类文件
1.
导入选择器模块。
```
ts
import
picker
from
'
@ohos.file.picker
'
;
```
2.
创建图库保存选项实例。
```
ts
const
photoSaveOptions
=
new
picker
.
PhotoSaveOptions
();
// 创建文件管理器保存选项实例
photoSaveOptions
.
newFileNames
=
[
"
PhotoViewPicker01.jpg
"
];
// 保存文件名(可选)
...
...
@@ -22,7 +22,7 @@
3.
创建图库选择器实例,调用
[
save()
](
../reference/apis/js-apis-file-picker.md#save
)
接口拉起FilePicker界面进行文件保存。
用户选择目标文件夹,用户选择与文件类型相对应的文件夹,即可完成文件保存操作。保存成功后,返回保存文档的URI。
```
ts
const
photoViewPicker
=
new
picker
.
PhotoViewPicker
();
photoViewPicker
.
save
(
photoSaveOptions
)
...
...
@@ -35,17 +35,16 @@
})
```
## 保存文档类文件
1.
导入选择器模块。
```
ts
import
picker
from
'
@ohos.file.picker
'
;
```
2.
创建文档保存选项实例。
```
ts
const
documentSaveOptions
=
new
picker
.
DocumentSaveOptions
();
// 创建文件管理器选项实例
documentSaveOptions
.
newFileNames
=
[
"
DocumentViewPicker01.txt
"
];
// 保存文件名(可选)
...
...
@@ -58,7 +57,6 @@
>
> 目前DocumentSelectOptions不支持参数配置,默认可以选择所有类型的用户文件。
```
ts
const
documentViewPicker
=
new
picker
.
DocumentViewPicker
();
// 创建文件选择器实例
documentViewPicker
.
save
(
documentSaveOptions
)
...
...
@@ -71,17 +69,16 @@
})
```
## 保存音频类文件
1.
导入选择器模块。
```
ts
import
picker
from
'
@ohos.file.picker
'
;
```
2.
创建音频保存选项实例。
```
ts
const
audioSaveOptions
=
new
picker
.
AudioSaveOptions
();
// 创建文件管理器选项实例
audioSaveOptions
.
newFileNames
=
[
'
AudioViewPicker01.mp3
'
];
// 保存文件名(可选)
...
...
@@ -92,8 +89,7 @@
> **说明:**
>
> 目前AudioSelectOptions不支持参数配置,默认可以选择所有类型的用户文件。
```
ts
const
audioViewPicker
=
new
picker
.
AudioViewPicker
();
audioViewPicker
.
save
(
audioSaveOptions
)
...
...
zh-cn/application-dev/file-management/select-user-file.md
浏览文件 @
1033ce1e
...
...
@@ -2,10 +2,8 @@
终端用户有时需要分享、保存一些图片、视频等用户文件,开发者需要在应用中支持此类使用场景。此时,开发者可以使用OpenHarmony系统预置的
[
文件选择器(FilePicker)
](
../reference/apis/js-apis-file-picker.md
)
,实现用户文件选择及保存能力。
根据用户文件的常见类型,文件选择器(FilePicker)分别提供以下接口:
-
[
PhotoViewPicker
](
../reference/apis/js-apis-file-picker.md#photoviewpicker
)
:适用于图片或视频类文件的选择与保存。
-
[
DocumentViewPicker
](
../reference/apis/js-apis-file-picker.md#documentviewpicker
)
:适用于文档类文件的选择与保存。
...
...
@@ -15,13 +13,13 @@
## 选择图片或视频类文件
1.
导入选择器模块。
```
ts
import
picker
from
'
@ohos.file.picker
'
;
```
2.
创建图库选择选项实例。
```
ts
const
photoSelectOptions
=
new
picker
.
PhotoSelectOptions
();
```
...
...
@@ -29,16 +27,15 @@
3.
选择媒体文件类型和选择媒体文件的最大数目。
以下示例以图片选择为例,媒体文件类型请参见
[
PhotoViewMIMETypes
](
../reference/apis/js-apis-file-picker.md#photoviewmimetypes
)
。
```
ts
photoSelectOptions
.
MIMEType
=
picker
.
PhotoViewMIMETypes
.
IMAGE_TYPE
;
// 过滤选择媒体文件类型为IMAGE
photoSelectOptions
.
maxSelectNumber
=
5
;
// 选择媒体文件的最大数目
```
4.
创建图库选择器实例,调用
[
select()
](
../reference/apis/js-apis-file-picker.md#select
)
接口拉起FilePicker界面进行文件选择。
文件选择成功后,返回
[
PhotoSelectResult
](
../reference/apis/js-apis-file-picker.md#photoselectresult
)
结果集,可以根据结果集中URI进行文件读取等操作。
```
ts
const
photoPicker
=
new
picker
.
PhotoViewPicker
();
photoPicker
.
select
(
photoSelectOptions
)
...
...
@@ -54,13 +51,13 @@
## 选择文档类文件
1.
导入选择器模块。
```
ts
import
picker
from
'
@ohos.file.picker
'
;
```
2.
创建文档选择选项实例。
```
ts
const
documentSelectOptions
=
new
picker
.
DocumentSelectOptions
();
```
...
...
@@ -70,8 +67,7 @@
> **说明:**
>
> 目前DocumentSelectOptions不支持参数配置,默认可以选择所有类型的用户文件。
```
ts
const
documentViewPicker
=
new
picker
.
DocumentViewPicker
();
// 创建文件选择器实例
documentViewPicker
.
select
(
documentSelectOptions
)
...
...
@@ -87,26 +83,27 @@
## 选择音频类文件
1.
导入选择器模块。
```
ts
import
picker
from
'
@ohos.file.picker
'
;
```
2.
创建音频选择选项实例。
```
ts
const
audioSelectOptions
=
new
picker
.
AudioSelectOptions
();
```
3.
创建音频选择器实例。调用
[
select()
](
../reference/apis/js-apis-file-picker.md#select-6
)
接口拉起FilePicker界面进行文件选择。
文件选择成功后,返回被选中音频的URI结果集。开发者可以根据结果集中URI做进一步的处理。
例如通过[文件管理接口](../reference/apis/js-apis-file-fs.md)根据URI拿到音频资源的文件句柄(FD),再配合媒体服务实现音频播放的开发,具体请参考[音频播放开发指导](../media/audio-playback-overview.md)。
例如通过
[
文件管理接口
](
../reference/apis/js-apis-file-fs.md
)
根据URI拿到音频资源的文件句柄(FD),再配合媒体服务实现音频播放的开发,具体请参考
[
音频播放开发指导
](
../media/audio-playback-overview.md
)
。
> **说明:**
>
> 目前AudioSelectOptions不支持参数配置,默认可以选择所有类型的用户文件。
```
ts
const
audioViewPicker
=
new
picker
.
AudioViewPicker
();
audioViewPicker
.
select
(
audioSelectOptions
)
...
...
zh-cn/application-dev/file-management/send-file-to-app-sandbox.md
浏览文件 @
1033ce1e
...
...
@@ -14,14 +14,14 @@
**表1**
应用沙箱路径与真实物理路径对应关系
| 应用沙箱路径 | 调试进程(hdc)视角下的实际路径 | 说明 |
| 应用沙箱路径 | 调试进程(hdc)视角下的实际路径 | 说明 |
| -------- | -------- | -------- |
| /data/storage/el1/bundle | /data/app/el1/bundle/public/
<
PACKAGENAME
>
| 应用安装包目录 |
| /data/storage/el1/base | /data/app/el1/
<
USERID
>
/base/
<
PACKAGENAME
>
| 应用el1级别加密数据目录 |
| /data/storage/el2/base | /data/app/el2/
<
USERID
>
/base/
<
PACKAGENAME
>
| 应用el2级别加密数据目录 |
| /data/storage/el1/database | /data/app/el1/
<
USERID
>
/database/
<
PACKAGENAME
>
| 应用el1级别加密数据库目录 |
| /data/storage/el2/database | /data/app/el2/
<
USERID
>
/database/
<
PACKAGENAME
>
| 应用el2级别加密数据库目录 |
| /data/storage/el2/distributedfiles | /mnt/hmdfs/
<
USERID
>
/account/merge_view/data/
<
PACKAGENAME
>
| 应用el2加密级别有帐号分布式数据融合目录 |
| /data/storage/el1/bundle | /data/app/el1/bundle/public/
<
PACKAGENAME
>
| 应用安装包目录 |
| /data/storage/el1/base | /data/app/el1/
<
USERID
>
/base/
<
PACKAGENAME
>
| 应用el1级别加密数据目录 |
| /data/storage/el2/base | /data/app/el2/
<
USERID
>
/base/
<
PACKAGENAME
>
| 应用el2级别加密数据目录 |
| /data/storage/el1/database | /data/app/el1/
<
USERID
>
/database/
<
PACKAGENAME
>
| 应用el1级别加密数据库目录 |
| /data/storage/el2/database | /data/app/el2/
<
USERID
>
/database/
<
PACKAGENAME
>
| 应用el2级别加密数据库目录 |
| /data/storage/el2/distributedfiles | /mnt/hmdfs/
<
USERID
>
/account/merge_view/data/
<
PACKAGENAME
>
| 应用el2加密级别有帐号分布式数据融合目录 |
## 开发示例
...
...
zh-cn/application-dev/file-management/set-security-label.md
浏览文件 @
1033ce1e
...
...
@@ -2,7 +2,6 @@
不同设备本身的安全能力差异较大,一些小的嵌入式设备安全能力远弱于平板等设备类型。用户或者应用不同的文件数据有不同安全诉求,例如个人的健康信息和银行卡信息等不期望被弱设备读取。因此,OpenHarmony提供一套完整的数据分级、设备分级标准,并针对不同设备制定不同的数据流转策略,具体规则请参见
[
数据、设备安全分级
](
../database/access-control-by-device-and-data-level.md
)
。
## 接口说明
API详细介绍请参见
[
ohos.file.securityLabel
](
../reference/apis/js-apis-file-securityLabel.md
)
。
...
...
@@ -15,8 +14,9 @@ API详细介绍请参见[ohos.file.securityLabel](../reference/apis/js-apis-file
| getSecurityLabel | 获取文件安全标签 | 方法 | √ | √ |
> **须知:**
>
> 1. 对于不满足安全等级的文件,跨设备仍然可以看到该文件,但是无权限打开访问该文件。
>
>
> 2. 分布式文件系统的数据等级默认为S3,应用可以主动设置文件的安全等级。
## 开发示例
...
...
zh-cn/application-dev/file-management/share-app-file.md
浏览文件 @
1033ce1e
...
...
@@ -13,6 +13,7 @@
文件URI的格式为:
格式为file://
<
bundleName
>
/
<
path
>
/\#networkid=
<
networkid
>
-
file:文件URI的标志。
-
bundleName:该文件资源的属主。
...
...
@@ -26,7 +27,7 @@
在分享文件给其他应用前,开发者需要先
[
获取应用文件路径
](
../application-models/application-context-stage.md#获取应用开发路径
)
。
1.
获取文件在应用沙箱中的路径,并转换为文件URI。
```
ts
import
UIAbility
from
'
@ohos.app.ability.UIAbility
'
;
import
fileuri
from
'
@ohos.file.fileuri
'
;
...
...
@@ -49,7 +50,7 @@
> **说明:**
>
> 写权限分享时,同时授予读权限。
```
ts
import
fileuri
from
'
@ohos.file.fileuri
'
;
import
window
from
'
@ohos.window
'
;
...
...
@@ -118,7 +119,6 @@
通过接口want的参数获取分享文件的URI,获取文件URI后通过fs.open()接口打开文件,获取对应的file对象后,可对文件进行读写操作。
```
ts
// xxx.ets
import
fs
from
'
@ohos.file.fs
'
;
...
...
zh-cn/application-dev/file-management/user-file-overview.md
浏览文件 @
1033ce1e
...
...
@@ -56,5 +56,5 @@ OpenHarmony提供[用户文件访问框架](#用户文件访问框架),用于
-
File Access Framework(用户文件访问框架)的主要功能模块如下:
-
File Access Helper:提供给文件管理器和文件选择器访问用户文件的API接口。
-
File Access ExtensionAbility:提供文件访问框架能力,由内卡文件管理服务UserFileManager和外卡文件管理服务ExternalFileManager组成,实现对应的文件访问功能。
-
UserFileManager:内卡文件管理服务,基于File Access ExtensionAbility框架实现,用于管理内置存储设备上的文件。
-
ExternalFileManager:外卡文件管理服务,基于File Access ExtensionAbility框架实现,用于管理外置存储设备上的文件。
-
UserFileManager:内卡文件管理服务,基于File Access ExtensionAbility框架实现,用于管理内置存储设备上的文件。
-
ExternalFileManager:外卡文件管理服务,基于File Access ExtensionAbility框架实现,用于管理外置存储设备上的文件。
zh-cn/application-dev/media/audio-call-development.md
浏览文件 @
1033ce1e
...
...
@@ -19,7 +19,7 @@ export default class VoiceCallDemoForAudioRenderer {
private
renderModel
=
undefined
;
private
audioStreamInfo
=
{
samplingRate
:
audio
.
AudioSamplingRate
.
SAMPLE_RATE_48000
,
// 采样率
channels
:
audio
.
AudioChannel
.
CHANNEL_2
,
// 通道
数
channels
:
audio
.
AudioChannel
.
CHANNEL_2
,
// 通道
sampleFormat
:
audio
.
AudioSampleFormat
.
SAMPLE_FORMAT_S16LE
,
// 采样格式
encodingType
:
audio
.
AudioEncodingType
.
ENCODING_TYPE_RAW
// 编码格式
}
...
...
@@ -60,7 +60,7 @@ export default class VoiceCallDemoForAudioRenderer {
// 开始一次音频渲染
async
start
()
{
let
stateGroup
=
[
audio
.
AudioState
.
STATE_PREPARED
,
audio
.
AudioState
.
STATE_PAUSED
,
audio
.
AudioState
.
STATE_STOPPED
];
if
(
stateGroup
.
indexOf
(
this
.
renderModel
.
state
)
===
-
1
)
{
// 当且仅当状态为
prepared、paused和stopped
之一时才能启动渲染
if
(
stateGroup
.
indexOf
(
this
.
renderModel
.
state
)
===
-
1
)
{
// 当且仅当状态为
STATE_PREPARED、STATE_PAUSED和STATE_STOPPED
之一时才能启动渲染
console
.
error
(
TAG
+
'
start failed
'
);
return
;
}
...
...
@@ -91,7 +91,7 @@ export default class VoiceCallDemoForAudioRenderer {
}
});
});
if
(
this
.
renderModel
.
state
===
audio
.
AudioState
.
STATE_RELEASED
)
{
// 如果渲染器状态为
released
,停止渲染
if
(
this
.
renderModel
.
state
===
audio
.
AudioState
.
STATE_RELEASED
)
{
// 如果渲染器状态为
STATE_RELEASED
,停止渲染
fs
.
close
(
file
);
await
this
.
renderModel
.
stop
();
}
...
...
@@ -105,7 +105,7 @@ export default class VoiceCallDemoForAudioRenderer {
}
// 暂停渲染
async
pause
()
{
// 只有渲染器状态为
running
的时候才能暂停
// 只有渲染器状态为
STATE_RUNNING
的时候才能暂停
if
(
this
.
renderModel
.
state
!==
audio
.
AudioState
.
STATE_RUNNING
)
{
console
.
info
(
'
Renderer is not running
'
);
return
;
...
...
@@ -119,7 +119,7 @@ export default class VoiceCallDemoForAudioRenderer {
}
// 停止渲染
async
stop
()
{
// 只有渲染器状态为
running或paused
的时候才可以停止
// 只有渲染器状态为
STATE_RUNNING或STATE_PAUSED
的时候才可以停止
if
(
this
.
renderModel
.
state
!==
audio
.
AudioState
.
STATE_RUNNING
&&
this
.
renderModel
.
state
!==
audio
.
AudioState
.
STATE_PAUSED
)
{
console
.
info
(
'
Renderer is not running or paused.
'
);
return
;
...
...
@@ -133,7 +133,7 @@ export default class VoiceCallDemoForAudioRenderer {
}
// 销毁实例,释放资源
async
release
()
{
// 渲染器状态不是
released
状态,才能release
// 渲染器状态不是
STATE_RELEASED
状态,才能release
if
(
this
.
renderModel
.
state
===
audio
.
AudioState
.
STATE_RELEASED
)
{
console
.
info
(
'
Renderer already released
'
);
return
;
...
...
@@ -161,7 +161,7 @@ export default class VoiceCallDemoForAudioCapturer {
private
audioCapturer
=
undefined
;
private
audioStreamInfo
=
{
samplingRate
:
audio
.
AudioSamplingRate
.
SAMPLE_RATE_44100
,
// 采样率
channels
:
audio
.
AudioChannel
.
CHANNEL_1
,
// 通道
数
channels
:
audio
.
AudioChannel
.
CHANNEL_1
,
// 通道
sampleFormat
:
audio
.
AudioSampleFormat
.
SAMPLE_FORMAT_S16LE
,
// 采样格式
encodingType
:
audio
.
AudioEncodingType
.
ENCODING_TYPE_RAW
// 编码格式
}
...
...
@@ -198,7 +198,7 @@ export default class VoiceCallDemoForAudioCapturer {
// 开始一次音频采集
async
start
()
{
let
stateGroup
=
[
audio
.
AudioState
.
STATE_PREPARED
,
audio
.
AudioState
.
STATE_PAUSED
,
audio
.
AudioState
.
STATE_STOPPED
];
if
(
stateGroup
.
indexOf
(
this
.
audioCapturer
.
state
)
===
-
1
)
{
// 当且仅当状态为
prepared、paused和stopped
之一时才能启动采集
if
(
stateGroup
.
indexOf
(
this
.
audioCapturer
.
state
)
===
-
1
)
{
// 当且仅当状态为
STATE_PREPARED、STATE_PAUSED和STATE_STOPPED
之一时才能启动采集
console
.
error
(
`
${
TAG
}
: start failed`
);
return
;
}
...
...
Miykael_xxm
🚴
@xiongjiamu
mentioned in commit
10a1b30a
·
4月 22, 2023
mentioned in commit
10a1b30a
mentioned in commit 10a1b30ac4bc0785719bd330bfdf3cdff606ddfb
开关提交列表
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录