HarmonyOS 鸿蒙Next文档编辑之“作者”获取方式及踩坑记录
HarmonyOS 鸿蒙Next文档编辑之“作者”获取方式及踩坑记录
文档创建或者编辑之后,一般会有一个附加属性,用于写入作者信息。
而这个作者信息从何而来呢?
通常来源有:APP使用者自定义、APP登录账户昵称、系统账户名称、设备名称、APP保底字段。
一般业务优先级为:APP使用者自定义->APP登录账户昵称->系统账户名称->设备名称->APP保底字段。
又可以分为:
1. 外部设置:APP使用者自定义、APP登录账户昵称。
2. 主动获取:系统账户名称、设备名称、APP保底字段。
那么这块业务逻辑可以以一个namespace开始设计:
export namespace EditorHelper {
}
export default EditorHelper;
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
对于外部使用,只需要提供一个getAuthor方法即可获取到“作者”。
export namespace EditorHelper {
/**
- 获取作者
- @returns 作者
*/
export function getAuthor(): string {
…
}
}
export default EditorHelper;
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
因为设备名称API必然会给定,因此APP保底字段用不着,代码可以扩充为:
import { deviceInfo } from ‘@kit.BasicServicesKit’;
export namespace EditorHelper {
const AUTHOR_BY_DEVICE: string = deviceInfo.marketName;
/**
- 获取作者
- @returns 作者
*/
export function getAuthor(): string {
<span class="hljs-keyword">return</span> AUTHOR_BY_DEVICE;
}
}
export default EditorHelper;
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
接下来开始获取系统账户名称,在 osAccount 中提供相关API。容易踩坑点:osAccount模块很多接口需要权限,很多接口仅仅提供给系统应用,使用该模块时注意接口限制。目前我们需要的仅仅是getOsAccountName,从中获取到系统账户名称,关键代码如下:
import { osAccount } from ‘@kit.BasicServicesKit’;
<span class="hljs-keyword">try</span> {
osAccount.getAccountManager().getOsAccountName()
.then((name: string) => {
<span class="hljs-keyword">if</span> (name !== <span class="hljs-literal">undefined</span> && name !== <span class="hljs-literal">null</span> && name.length > <span class="hljs-number">0</span>) {
<span class="hljs-comment">// 得到系统账户名称</span>
}
});
} <span class="hljs-keyword">catch</span> (e) {
<span class="hljs-comment">//ignore</span>
}</code><button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button></pre> <p><span style="color: rgb(230,62,60);"><span style="font-size: 18.0px;"><strong>坑点:</strong></span></span></p> <p><span style="color: rgb(230,62,60);"><span style="font-size: 18.0px;"><strong>1、该方法为异步方法,通常我们使用时是主线程同步获取。</strong></span></span></p> <p><span style="color: rgb(230,62,60);"><span style="font-size: 18.0px;"><strong>2、目前虚拟机能获取到叫“user”的用户名称,而真机返回的居然是一个长度为0的空字符串。</strong></span></span></p> <p><span style="color: rgb(230,62,60);"><span style="font-size: 18.0px;"><strong>3、保险起见还是判断一下undefined与null。</strong></span></span></p> <p><span style="color: rgb(230,62,60);"><span style="font-size: 18.0px;"><strong>4、该名称可能变更,但没有变化监听,虽然是低概率事件。</strong></span></span></p> <p>对于以上坑点,4只好通过在getAuthor进行一次刷新,保证下一次获取到的是变化后的系统账户名称。2、3做好检查即可。而1,只好通过提前获取,推荐方式是在AbilityStage的onCreate中初始化获取。改进代码如下:</p> <pre style="position: relative;"><code class="language-javascript hljs ">import { deviceInfo } from <span class="hljs-string">'@kit.BasicServicesKit'</span>;
import { osAccount } from ‘@kit.BasicServicesKit’;
export namespace EditorHelper {
const AUTHOR_BY_DEVICE: string = deviceInfo.marketName;
let sAuthorByOsAccountName: string | undefined = undefined;
function refreshAuthorByOsAccountName() {
try {
osAccount.getAccountManager().getOsAccountName()
.then((name: string) => {
if (name !== undefined && name !== null && name.length > 0) {
sAuthorByOsAccountName = name;
}
});
} catch (e) {
//ignore
}
}
/**
- 初始化
*/
export function init(): void {
refreshAuthorByOsAccountName();
}
/**
- 销毁
*/
export function destroy(): void {
}
/**
- 获取作者
- @returns 作者
*/
export function getAuthor(): string {
// 进行系统账户名称刷新
refreshAuthorByOsAccountName();
if (sAuthorByOsAccountName !== undefined) {
return sAuthorByOsAccountName;
}
return AUTHOR_BY_DEVICE;
}
}
export default EditorHelper;
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
init 方法提供给AbilityStage的onCreate进行初始化,destroy 方法提供给AbilityStage的onDestroy进行销毁。空实现的destroy用于后续提供监听变化时好补充逻辑。
最后我们再提供一个setAuthor给其他逻辑模块进行设置作者,比如:APP使用者自定义、APP登录账户昵称,该部分的实际逻辑不放在该模块中,最终代码为:
import { deviceInfo } from ‘@kit.BasicServicesKit’;
import { osAccount } from ‘@kit.BasicServicesKit’;
export namespace EditorHelper {
const AUTHOR_BY_DEVICE: string = deviceInfo.marketName;
let sAuthorByOsAccountName: string | undefined = undefined;
let sAuthorCustom: string | undefined = undefined;
function refreshAuthorByOsAccountName() {
try {
osAccount.getAccountManager().getOsAccountName()
.then((name: string) => {
if (name !== undefined && name !== null && name.length > 0) {
sAuthorByOsAccountName = name;
}
});
} catch (e) {
//ignore
}
}
/**
- 初始化
*/
export function init(): void {
refreshAuthorByOsAccountName();
}
/**
- 销毁
*/
export function destroy(): void {
}
/**
- 获取作者
- @returns 作者
*/
export function getAuthor(): string {
if (sAuthorCustom !== undefined) {
return sAuthorCustom;
}
// 进行系统账户名称刷新
refreshAuthorByOsAccountName();
if (sAuthorByOsAccountName !== undefined) {
return sAuthorByOsAccountName;
}
return AUTHOR_BY_DEVICE;
}
/**
- 设置作者
- @param author 作者
*/
export function setAuthor(author: string): void {
sAuthorCustom = author;
}
}
export default EditorHelper;
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
更多关于HarmonyOS 鸿蒙Next文档编辑之“作者”获取方式及踩坑记录的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS 鸿蒙Next文档编辑之“作者”获取方式及踩坑记录的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
HarmonyOS 鸿蒙Next文档编辑之“作者”获取方式及踩坑记录
在HarmonyOS鸿蒙Next系统中进行文档编辑时,获取文档“作者”信息的方式主要依赖于系统提供的API接口。具体步骤如下:
-
获取文档对象:首先,通过系统提供的文档管理API,获取到需要编辑的文档对象。
-
访问文档属性:在获取到文档对象后,通过文档对象的属性访问方法,找到“作者”这一属性。
-
读取或修改作者信息:根据需求,可以读取当前的作者信息,或者通过赋值操作修改作者信息。
踩坑记录:
- 权限问题:在访问文档属性时,确保应用已获取到相应的文件读写权限,否则将无法读取或修改作者信息。
- API兼容性:不同版本的HarmonyOS系统,API接口可能存在差异,需确保使用的API在当前系统版本中有效。
- 文档格式限制:部分文档格式可能不支持直接修改作者信息,需先转换为支持修改的格式再进行操作。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。该官网提供了专业的技术支持和客服服务,可帮助解决在使用HarmonyOS鸿蒙Next系统时遇到的各种问题。