桌面快捷方式开发实践 原创
一、介绍
当应用的功能日益复杂时,用户在应用里寻觅某个功能的操作流程也越发冗长。若想优化用户体验,不妨为应用里那些常用功能设立桌面快捷方式,从而达成快速开启应用、一键抵达特定功能之类的效果。就像相机应用的 “快速拍照”、便签应用的 “新建便签” 以及地图应用的常用地点导航等功能的快捷途径,用户借助这些快捷方式能够迅速切入特定功能页面,这不但能大幅提升操作效率,而且会加深用户对应用的依赖程度。运用快捷方式,还能够达成个性化定制的诉求,构建多个快捷方式,以此契合个性化的工作模式与操作习惯。
二、工程目录
├──module.json5 //配置文件
├──entry/src/main/ets // 代码区
│ ├──entryability
│ │ └──EntryAbility.ets // 程序入口类
│ ├──entrybackupability
│ │ └──EntryBackupAbility.ets
│ └──pages
│ ├──Index.ets // 主页
│ ├──SecondPage.ets // 跳转目标页
│
└──entry/src/main/resources // 应用资源目录
└──base
└──profile
└──shortcuts_config.json //快捷方式配置文件
三、使用说明
长安应用图标,即可出现快捷方式列表。点击对应图标,即可快速打开应用中对应的页面。或者将快捷方式图标长按拖动到桌面,然后点击打开对应页面。
四、实现流程
给应用添加的导航快捷方式需要进行如下步骤:
(1)在resources/base/profile下的main_pages.json文件中添加对应快捷方式页面的路由信息。
{
"src": [
"pages/Index",
"pages/SecondPage"//作为快捷方式跳转目标页
]
}
(2)/resources/base/profile/目录下创建名为shortcuts_config.json的文件
shortcutId表示快捷方式的ID、label表示快捷方式对外显示的文字描述信息、icon表示快捷方式的图标、wants中则是快捷方式内定义的目标wants信息集合。通过wants中的parameters参数来指定拉起快捷方式时的自定义数据。
{
"shortcuts": [
{
"shortcutId": "second_id",
"label": "$string:label",
"icon": "$media:app_icon",
"wants": [
{
"bundleName": "com.example.shortcutdemo",
"moduleName": "entry",
"abilityName": "EntryAbility",
"parameters": {
"shortCutKey": "SecondPage"
}
}
]
}
]
}
(3)在module.json5配置文件中的abilities标签下的metadata中设置resource属性值为$profile:shortcuts_config,指定应用的快捷方式配置文件,即使用shortcuts_config.json文件中的shortcuts配置。
{
"abilities": [
"metadata": [
{
"name": "ohos.ability.shortcuts",
"resource": "$profile:shortcuts_config"
}
]
]
}
(4)在EntryAbility.ets文件中定义跳转到指定页面的方法。
在步骤2中,通过parameters参数来指定了拉起快捷方式时的自定义数据 ,如"shortCutKey": "SecondPage"。此时,可以通过获取want中的parameters里的shortCutKey来判断用户使用了哪种快捷方式,从而进行对应的页面跳转。
需要注意的是如果app不在后台,那么会走onCreate()方法,如果app在后台,不会再走onCreate()方法而是回调onNewWant()方法。所以对这两种情况都要进行处理。
EntryAbility.ets
onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
if ((want.parameters)) {
let shortCutKey = want.parameters?.shortCutKey;
if (shortCutKey === "SecondPage") {
router.pushUrl({
url: "pages/SecondPage"
})
}
}
}
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
if ((want.parameters)) {
let shortCutKey = want.parameters?.shortCutKey;
if (shortCutKey === "SecondPage") {
this.path = "pages/SecondPage"
}
}
}
onWindowStageCreate(windowStage: window.WindowStage): void {
windowStage.loadContent(this.path, (err) => {
});
}