HarmonyOS 鸿蒙Next文档编辑之“作者”获取方式及踩坑记录

发布于 1周前 作者 itying888 来自 鸿蒙OS

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) =&gt; {
      <span class="hljs-keyword">if</span> (name !== <span class="hljs-literal">undefined</span> &amp;&amp; name !== <span class="hljs-literal">null</span> &amp;&amp; name.length &gt; <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

1 回复

更多关于HarmonyOS 鸿蒙Next文档编辑之“作者”获取方式及踩坑记录的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS 鸿蒙Next文档编辑之“作者”获取方式及踩坑记录

在HarmonyOS鸿蒙Next系统中进行文档编辑时,获取文档“作者”信息的方式主要依赖于系统提供的API接口。具体步骤如下:

  1. 获取文档对象:首先,通过系统提供的文档管理API,获取到需要编辑的文档对象。

  2. 访问文档属性:在获取到文档对象后,通过文档对象的属性访问方法,找到“作者”这一属性。

  3. 读取或修改作者信息:根据需求,可以读取当前的作者信息,或者通过赋值操作修改作者信息。

踩坑记录

  • 权限问题:在访问文档属性时,确保应用已获取到相应的文件读写权限,否则将无法读取或修改作者信息。
  • API兼容性:不同版本的HarmonyOS系统,API接口可能存在差异,需确保使用的API在当前系统版本中有效。
  • 文档格式限制:部分文档格式可能不支持直接修改作者信息,需先转换为支持修改的格式再进行操作。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。该官网提供了专业的技术支持和客服服务,可帮助解决在使用HarmonyOS鸿蒙Next系统时遇到的各种问题。

回到顶部