写点什么

【每日学点 HarmonyOS Next 知识】粘贴板、异步、用户权限、锁屏事件、对话框

作者:轻口味
  • 2025-03-12
    北京
  • 本文字数:2187 字

    阅读完需:约 7 分钟

【每日学点HarmonyOS Next知识】粘贴板、异步、用户权限、锁屏事件、对话框

1、HarmonyOS 粘贴板权限无法申请时,粘贴板能力如何与跨端容器如 H5、Flutter 之间进行共享?

粘贴板权限无法申请时,粘贴板能力如何与跨端容器如 H5、Flutter 之间进行共享?


可以在 h5 页面传递订单 id 到 arkTs 处,然后通过 arkTs 复制到粘贴板上面,两者数据交互参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/web-in-page-app-function-invoking-V5


arkTs 的复制粘贴功能参考 demo:


import { pasteboard } from '@kit.BasicServicesKit';@State message: string = 'Hello World'Text(this.message).onClick(() => {  const pasteboardData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_PLAIN, this.message)  const systemPasteboard = pasteboard.getSystemPasteboard()  systemPasteboard.setData(pasteboardData) //将数据放入剪切板  systemPasteboard.getData().then((data) => {    if (data) {      promptAction.showToast({ message: "复制成功" })    } else {      promptAction.showToast({ message: "复制失败" })    }  })})
复制代码

2、HarmonyOS 使用 async 、await 的含义?

使用 async 、await 时,整个异步调用是在主线程吗? 这过程中有没有发生线程的切换?


使用 async 、await 时还是在主线程中,没有发生过线程切换,目前子线程只能是 taskpool 和 worker

3、HarmonyOS requestPermissionsFromUser 用户点了允许了之后,getBundleInfoForSelf 返回的 BundleInfo 里,permissionGrantStates 里还是-1?

参考以下代码:


async reqPermissionsFromUser(): Promise<number[]> {  let context = getContext() as common.UIAbilityContext;  let atManager = abilityAccessCtrl.createAtManager();  let grantStatus = await atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA']);  return grantStatus.authResults;}// 申请相机权限async requestCameraPermission() {  let grantStatus = await this.reqPermissionsFromUser()  for (let i = 0; i < grantStatus.length; i++) {    if (grantStatus[i] === 0) {      // 用户授权,可以继续访问目标操作      this.userGrant = true;    }  }}
async onPageShow() { await this.requestCameraPermission();}
复制代码

4、HarmonyOS 如何获取锁屏事件?

视频播放中需要监听锁屏事件,锁屏后需要暂停播放,现无法获取锁屏事件。参考 demo:


import Base from '@ohos.base';import CommonEventManager from '@ohos.commonEventManager';
let subscriber:CommonEventManager.CommonEventSubscriber; //用于保存创建成功的订阅者对象,后续使用其完成订阅及退订的动作
//订阅者信息let subscribeInfo:CommonEventManager.CommonEventSubscribeInfo = { events: [CommonEventManager.Support.COMMON_EVENT_SCREEN_LOCKED, CommonEventManager.Support.COMMON_EVENT_SCREEN_UNLOCKED]};
//发布公共事件回调function subscribeCB(err:Base.BusinessError, data:CommonEventManager.CommonEventData) { if (err) { console.error(`publish failed, code is ${err.code}, message is ${err.message}`); } else { if (data.event == CommonEventManager.Support.COMMON_EVENT_SCREEN_LOCKED) { console.info("MWB ",`lock screen`); } else if (data.event == CommonEventManager.Support.COMMON_EVENT_SCREEN_UNLOCKED) { console.info("MWB ",`unlock screen`); } }}

//创建订阅者回调function createCB(err:Base.BusinessError, commonEventSubscriber:CommonEventManager.CommonEventSubscriber) { if(!err) { console.info("createSubscriber"); subscriber = commonEventSubscriber; try { CommonEventManager.subscribe(subscriber, subscribeCB); } catch (error) { let err:Base.BusinessError = error as Base.BusinessError; console.error(`subscribe failed, code is ${err.code}, message is ${err.message}`); } } else { console.error(`createSubscriber failed, code is ${err.code}, message is ${err.message}`); }}
//创建订阅者try { CommonEventManager.createSubscriber(subscribeInfo, createCB);} catch (error) { let err:Base.BusinessError = error as Base.BusinessError; console.error(`createSubscriber failed, code is ${err.code}, message is ${err.message}`);}
@Entry@Componentstruct ScreenLockEventManageDemo {
build() { Column() { Text('HELLO WORLD') .fontSize('20') } .width('100%') .height('100%')
}}
复制代码

5、HarmonyOS AlertDialog 如何与页面做绑定,关闭页面的同时关闭所有的 AlertDialog?

AlertDialog 只能设置 autoCancel 点击时取消,或者在点击定义的按钮时取消,如果想通过方法调用取消的话可以尝试使用自定义弹窗 CustomDialog


AlertDialog 参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-methods-alert-dialog-box-V5


CustomDialog 参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-methods-custom-dialog-box-V5



发布于: 刚刚阅读数: 4
用户头像

轻口味

关注

🏆2021年InfoQ写作平台-签约作者 🏆 2017-10-17 加入

Android、音视频、AI相关领域从业者。 欢迎加我微信wodekouwei拉您进InfoQ音视频沟通群 邮箱:qingkouwei@gmail.com

评论

发布
暂无评论
【每日学点HarmonyOS Next知识】粘贴板、异步、用户权限、锁屏事件、对话框_HarmonyOS_轻口味_InfoQ写作社区