当前位置: 首页 > wzjs >正文

在酒店做那个网站好自己做网站广告法

在酒店做那个网站好,自己做网站广告法,文章标签 wordpress,社区网站建设论文文章大纲 引言一、Want概述二、Want的类型1、显式Want2、隐式Want3、隐式Want的匹配 三、隐式启动Want 源码概述1、有且仅有一个Ability匹配2、有多个Ability 匹配需要弹出选择对话框3、ImplicitStartProcessor::ImplicitStartAbility3.1、GenerateAbilityRequestByAction3.1.1…

文章大纲

  • 引言
  • 一、Want概述
  • 二、Want的类型
    • 1、显式Want
    • 2、隐式Want
    • 3、隐式Want的匹配
  • 三、隐式启动Want 源码概述
    • 1、有且仅有一个Ability匹配
    • 2、有多个Ability 匹配需要弹出选择对话框
    • 3、ImplicitStartProcessor::ImplicitStartAbility
        • 3.1、GenerateAbilityRequestByAction
          • 3.1.1、GetBundleManagerHelper 获取BMS对象
          • 3.1.2、GetBundleManagerHelper()->ImplicitQueryInfos
          • 3.1.3、ImplicitStartProcessor::FilterAbilityList
        • 3.2、定义回调
        • 3.3、根据dialogAppInfos和deviceType的组合进行不同的分支处理
      • 4、当有多个匹配结果时会先执行FilterAbilityList(有条件执行)
  • 小结

引言

在Android 中Activity及其他四大组件之间是通过Intent来传递信息的,在我们的鸿蒙操作系统中同样有自己组件的“Intent”,今天我们介绍下鸿蒙中的“Intent”。

暂且对照着Android中的Intent 来理解。

一、Want概述

Want 是对象间信息传递的载体,可以用于应用组件间的信息传递。其使用场景之一是作为startAbility()的参数,包含了指定的启动目标以及启动时需携带的相关数据,如bundleName和abilityName字段分别指明目标Ability所在应用的包名以及对应包内的Ability名称。当UIAbilityA启动UIAbilityB并需要传入一些数据给UIAbilityB时,Want可以作为一个载体将数据传给UIAbilityB。

二、Want的类型

1、显式Want

在启动Ability时指定了abilityName和bundleName的Want称为显式Want。
当有明确处理请求的对象时,通过提供目标Ability所在应用的包名信息(bundleName),并在Want内指定abilityName便可启动目标Ability。显式Want通常用于在当前应用开发中启动某个已知的Ability。

let wantInfo = {deviceId: '', // deviceId为空表示本设备bundleName: 'com.example.myapplication',abilityName: 'FuncAbility',
}

在这里插入图片描述

2、隐式Want

当请求处理的对象不明确时,希望在当前应用中使用其他应用提供的某个能力(通过​​skills标签​​定义),而不关心提供该能力的具体应用,可以使用隐式Want。例如使用隐式Want描述需要打开一个链接的请求,而不关心通过具体哪个应用打开,系统将匹配声明支持该请求的所有应用。

3、隐式Want的匹配

根据系统中待匹配Ability的匹配情况不同,使用隐式Want启动Ability时会出现以下三种情况。

  • 未匹配到满足条件的Ability:启动失败。
  • 匹配到一个满足条件的Ability:直接启动该Ability。
  • 匹配到多个满足条件的Ability(UIAbility):弹出选择框让用户选择。

匹配约束:

  • 调用方传入的want参数中不带有abilityName和bundleName,则不允许通过隐式Want启动所有应用的ServiceExtensionAbility。
  • 调用方传入的want参数中带有bundleName,则允许使用startServiceExtensionAbility()方法隐式Want启动ServiceExtensionAbility,默认返回优先级最高的ServiceExtensionAbility,如果优先级相同,返回第一个。
  let wantInfo: Want = {deviceId: "",action: "ohos.want.action.viewData",entities: ['entity.system.videoPlayer'],abilityName: "",uri: "",type: "",parameters: {}}

在这里插入图片描述

通过上面表格可以除了bundleName和moduleName,只有uri、type、action、entities 字段参与匹配,换句话说提供相应能力的hap中的moudle.json5 里的skills 的这四个字段的值会影响到匹配结果。
在这里插入图片描述

三、隐式启动Want 源码概述

foundation/ability/ability_runtime/services/abilitymgr/src/implicit_start_processor.cpp 处理隐式匹配规则
foundation/ability/ability_runtime/services/abilitymgr/src/system_dialog_scheduler.cpp 弹出模态对话框

1、有且仅有一个Ability匹配

在这里插入图片描述

2、有多个Ability 匹配需要弹出选择对话框

在这里插入图片描述

3、ImplicitStartProcessor::ImplicitStartAbility

对应的代码由ImplicitStartProcessor::ImplicitStartAbility开始处理,首先AbilityRequest的callType = 0,传入的DeviceType为tablet,而社区默认是default。

3.1、GenerateAbilityRequestByAction

传入std::vector dialogAppInfos、deviceType 成功创建AbilityRequest对象,

3.1.1、GetBundleManagerHelper 获取BMS对象
3.1.2、GetBundleManagerHelper()->ImplicitQueryInfos
3.1.3、ImplicitStartProcessor::FilterAbilityList
3.2、定义回调
auto startAbilityTask = [imp = shared_from_this(), request, userId, identity](const std::string& bundle, const std::string& abilityName) mutable {HILOG_INFO("implicit start ability call back.");IPCSkeleton::SetCallingIdentity(identity);AAFwk::Want targetWant = request.want;targetWant.SetElementName(bundle, abilityName);auto callBack = [imp, targetWant, request, userId]() -> int32_t {return imp->ImplicitStartAbilityInner(targetWant, request, userId);};return imp->CallStartAbilityInner(userId, targetWant, callBack, request.callType);
};
3.3、根据dialogAppInfos和deviceType的组合进行不同的分支处理
  • dialogAppInfos.size() == 0 && (deviceType == STR_PHONE || deviceType == STR_DEFAULT

  • dialogAppInfos.size() == 0 && deviceType != STR_PHONE && deviceType != STR_DEFAULT

  • dialogAppInfos.size() == 0 && deviceType != STR_PHONE && deviceType != STR_DEFAULT

  • deviceType == STR_PHONE || deviceType == STR_DEFAULT
    DelayedSingleton::GetInstance()->GetSelectorDialogWant(dialogAppInfos, request.want, request.callerToken)

以上四种情况之外的

4、当有多个匹配结果时会先执行FilterAbilityList(有条件执行)

  • MatchTypeAndUri
  • AddAbilityInfoToDialogInfos
  • 循环从extensionInfos中获取dialogAppInfo信息并存入dialogAppInfos
    在这里插入图片描述

小结

弹出对话框的SelectorDialog_Service是一个ServiceExtensionAbility,进程为com.ohos.amsdialog,连接上Selector_Dialog_Service后会触发其onCreate->OnRequest函数执行,createWindow时
在这里插入图片描述

  private async createWindow(name: string, windowType: number, rect) {let deviceTypeInfo = deviceInfo.deviceType;console.info(TAG, 'create window');try {win = await window.create(globalThis.selectExtensionContext, name, windowType);if (windowType === window.WindowType.TYPE_DIALOG) {await win.bindDialogTarget(globalThis.callerToken.value, () => {win.destroyWindow();winNum--;if (winNum === 0) {globalThis.selectExtensionContext.terminateSelf();}});}if (deviceTypeInfo !== 'default') {await win.hideNonSystemFloatingWindows(true);}await win.moveTo(rect.left, rect.top);await win.resetSize(rect.width, rect.height);if (globalThis.params.deviceType === 'phone' || globalThis.params.deviceType === 'tablet') {await win.loadContent('pages/selectorPhoneDialog');} else {await win.loadContent('pages/selectorPcDialog');}await win.setBackgroundColor('#00000000');await win.show();} catch (e) {console.error(TAG, 'window create failed: ' + JSON.stringify(e));}}

然后去触发方舟编译器解包ams_system_dialog.hap执行,
在这里插入图片描述
最终结论:
1、win.hideNonSystemFloatingWindows(true); 的父类实现中默认报异常中断,所以需要在子类中实现该函数。(但是问题来了,里面的细节如何实现呢?社区中都是直接返回true)
2、在不同的设备上弹出的匹配对话框的位置和尺寸大小还需要适配,在
this.createWindow(‘SelectorDialog’ + startId, windowType, navigationBarRect);

http://www.dtcms.com/wzjs/841245.html

相关文章:

  • 网站建设的标签指的是qq推广平台
  • 企业管理系统大全免费seo流量查询
  • 免费网站空间哪个好运城建设网站
  • 用服务器建立网站吗广告游戏
  • ih5做的网站怎么上传企业网站建设新闻发布
  • 深圳网站建设黄浦网络 技术差智慧团建pc端网址
  • 网站建设解决长沙做黄叶和网站的公司有哪些
  • 建设网站群的好处首页关键词排名优化
  • 织梦网站logo修改织梦cms使用教程
  • 东莞市传送机技术支持 网站建设wordpress 显示视频
  • 济南网站建设兼职大连云购物app下载安装到手机
  • mysql数据做彩票网站苏州商品关键词优化
  • 全网营销思路佛山网站优化
  • 有什么网站可以做运动鞋智慧团建网站登陆平台
  • 网站建设现状分析网站模板怎么用
  • 网站百度seo关键词优化合肥网站推广公司哪家好
  • 广州市网站建设企业深圳皇冠科技有限公司网站
  • 苏州市住房和城乡建设部网站校园服装网站建设演示文稿
  • 写作挣钱的网站什么视频网站可以做链接地址
  • 工业设备网站源码教你如何识别一个wordpress的主题
  • 文字网站居中八年级信息技术网站建立怎么做
  • 浙江高速建设公司网站网站建设 服务承诺
  • 沈阳网站建设定制眼镜厂官网
  • 电子商务网站开发需求分析新干线快递国内如何查单
  • 江西网站建设网络公司电商网站界面规范
  • 建国外网站需要多少钱室内设计学校前十
  • php猎奇源码 织梦新闻视频图片八卦娱乐趣事资讯门户网站模板搜索引擎优化不包括
  • 怎么给公司做网站wordpress模板和下载不同
  • 门户网站界面设计wordpress给文章添加子页面
  • 深圳可以做网站的公司广告设计与制作就业前景