HarmonyOS 项目 API 使用注意事项总结
1.手动导包的重要性:
* 自动导包(Alt + 回车)并不总是有效,某些包需要手动输入。例如:
import fs from '@ohos.file.fs' ; // 需手动输入
2.使用 @Kit:
* 从 API 12 开始,使用 @Kit 替代 @ohos。许多论坛资料仍使用 @ohos,可能导致功能不显示。例如:
要把
import hilog from '@ohos.hilog' ; import deviceInfo from '@ohos.deviceInfo' ;
改为
import
{
hilog
}
from
'@kit.PerformanceAnalysisKit'
;
import
{
deviceInfo
}
from
'@kit.BasicServicesKit'
;
* 新建 API 12 项目时,查找资料时遇到 @ohos,请参考官方文档确认对应的 @Kit 版本。
3.注意手机版本:
* Beta 1 和 Beta 3 之间差异显著,尽管代码在 API 12 下不报错,但在真机上可能会出现错误。确保真机版本升级到 Beta 3 以上,官方文档可能未提供相关提示。
常用 API 导入示例
// 日志系统 import { hilog } from '@kit.PerformanceAnalysisKit' ; // Web 控制能力 import { webview } from '@kit.ArkWeb' ; // 图片处理 import { image } from '@kit.ImageKit' ; // 相册管理 import { photoAccessHelper } from '@kit.MediaLibraryKit' ; // 呼叫管理 import { call } from '@kit.TelephonyKit' ; // 资源管理 import { resourceManager } from '@kit.LocalizationKit' ; // 分享功能 import { systemShare } from '@kit.ShareKit' ; // 用户首选项 import { preferences } from '@kit.ArkData' ; // 事件处理 import { emitter } from '@kit.BasicServicesKit' ; // 文件操作 import { fileIo as fs } from '@kit.CoreFileKit' ; // 网络连接管理 import { connection } from '@kit.NetworkKit' ; // 扫码功能 import { scanBarcode } from '@kit.ScanKit' ; // 设备信息 import { deviceInfo } from '@kit.BasicServicesKit' ; // 剪贴板管理 import { pasteboard } from '@kit.BasicServicesKit' ; // 窗口管理 import { window } from '@kit.ArkUI' ; // 动画插值曲线 import { curves } from '@kit.ArkUI' ; // 组件内容封装 import { ComponentContent } from '@kit.ArkUI' ; // 提示框 import { promptAction } from '@kit.ArkUI' ; // 路由管理 import { router } from '@kit.ArkUI' ; // 页签型标题栏 import { TabTitleBar } from '@kit.ArkUI' ;
// @ohos全面替换 @kit
//hilog日志系统,使应用/服务可以按照指定级别、标识和格式字符串输出日志内容,帮助开发者了解应用/服务的运行状态,更好地调试程序。
import
{
hilog
}
from
'@kit.PerformanceAnalysisKit'
;
//@ohos.web.webview提供web控制能力,Web组件提供网页显示的能力。访问在线网页时需添加网络权限:ohos.permission.INTERNET,具体申请方式请参考声明权限。
import
{
webview
}
from
'@kit.ArkWeb'
;
//本模块提供图片处理效果,包括通过属性创建PixelMap、读取图像像素数据、读取区域内的图片数据等。
import
{
image
}
from
'@kit.ImageKit'
;
//该模块提供相册管理模块能力,包括创建相册以及访问、修改相册中的媒体数据信息等。
import
{
photoAccessHelper
}
from
'@kit.MediaLibraryKit'
;
//该模块提供呼叫管理功能,包括拨打电话、跳转到拨号界面、获取通话状态、格式化电话号码等。
import
{
call
}
from
'@kit.TelephonyKit'
;
//资源管理模块,根据当前configuration:语言、区域、横竖屏、Mcc(移动国家码)和Mnc(移动网络码)、Device capability(设备类型)、Density(分辨率)提供获取应用资源信息读取接口。
import
{
resourceManager
}
from
'@kit.LocalizationKit'
//本模块提供分享数据创建及分享面板拉起的功能,提供多种系统标准分享服务,例如分享数据给其他应用、复制、打印等。
//
// 分享接入应用需要配置、呈现和关闭分享面板。
// 分享面板的配置包括数据对象、呈现视图的方式、预览方式等。
import
{
systemShare
}
from
'@kit.ShareKit'
;
//本模块对标准化数据类型进行了抽象定义与描述。
import
{
uniformTypeDescriptor
as
utd
}
from
'@kit.ArkData'
;
//@ohos.data.preferences (用户首选项)用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。
//
// 数据存储形式为键值对,键的类型为字符串型,值的存储数据类型包括数字型、字符型、布尔型以及这3种类型的数组类型。
import
{
preferences
}
from
'@kit.ArkData'
;
//错误信息打印
import
{
BusinessError
}
from
'@kit.BasicServicesKit'
;
//开发者可以通过该模块引用Ability公共模块类。
import
{
common
}
from
'@kit.AbilityKit'
;
//需要校验的权限名称,合法的权限名取值可在应用权限列表中查询。
import
{
Permissions
}
from
'@kit.AbilityKit'
;
//UIAbility是包含UI界面的应用组件,继承自Ability,提供组件创建、销毁、前后台切换等生命周期回调,同时也具备组件协同的能力,组件协同主要提供如下常用功能:
import
{
UIAbility
}
from
'@kit.AbilityKit'
;
//本模块提供应用信息查询能力,支持BundleInfo、ApplicationInfo、AbilityInfo、ExtensionAbilityInfo等信息的查询。
import
{
bundleManager
}
from
'@kit.AbilityKit'
;
//Want是对象间信息传递的载体, 可以用于应用组件间的信息传递。 Want的使用场景之一是作为startAbility的参数, 其包含了指定的启动目标, 以及启动时需携带的相关数据, 如bundleName和abilityName字段分别指明目标Ability所在应用的Bundle名称以及对应包内的Ability名称。当Ability A需要启动Ability B并传入一些数据时, 可使用Want作为载体将这些数据传递给Ability B。
import
{
Want
}
from
'@kit.AbilityKit'
;
//本模块提供HTTP数据请求能力。应用可以通过HTTP发起一个数据请求,支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。
import
{
http
}
from
'@kit.NetworkKit'
;
//网络连接管理提供管理网络一些基础能力,包括获取默认激活的数据网络、获取所有激活数据网络列表、开启关闭飞行模式、获取网络能力信息等功能。
import
{
connection
}
from
'@kit.NetworkKit'
;
//本模块提供默认界面扫码能力。
import
{
scanBarcode
}
from
'@kit.ScanKit'
//本模块提供扫码公共信息。
import
{
scanCore
}
from
'@kit.ScanKit'
//本模块提供终端设备信息查询,开发者不可配置。其中deviceInfo.marketNames可以获取设备名称,比如mate60
import
{
deviceInfo
}
from
'@kit.BasicServicesKit'
;
//本模块提供了在同一进程不同线程间,或同一进程同一线程内,发送和处理事件的能力,包括持续订阅事件、单次订阅事件、取消订阅事件,以及发送事件到事件队列的能力。
import
{
emitter
}
from
'@kit.BasicServicesKit'
;
//本模块主要提供管理系统剪贴板的能力,为系统复制、粘贴功能提供支持。系统剪贴板支持对文本、HTML、URI、Want、PixelMap等内容的操作。
import
{
pasteboard
}
from
'@kit.BasicServicesKit'
;
//该模块为基础文件操作API,提供基础文件操作能力,包括文件基本管理、文件目录管理、文件信息统计、文件流式读写等常用功能。
import
{
fileIo
as
fs
}
from
'@kit.CoreFileKit'
;
//该模块提供空间查询相关的常用功能:包括对内外卡的空间查询,对应用分类数据统计的查询,对应用数据的查询等。
import
{
storageStatistics
}
from
'@kit.CoreFileKit'
;
//选择器(Picker)是一个封装PhotoViewPicker、DocumentViewPicker、AudioViewPicker等API模块,具有选择与保存的能力。应用可以自行选择使用哪种API实现文件选择和文件保存的功能。该类接口,需要应用在界面UIAbility中调用,否则无法拉起photoPicker应用或FilePicker应用。
import
{
picker
}
from
'@kit.CoreFileKit'
;
//本模块提供设置动画插值曲线功能,用于构造阶梯曲线对象、构造三阶贝塞尔曲线对象和构造弹簧曲线对象。
import
{
curves
}
from
'@kit.ArkUI'
;
//ComponentContent表示组件内容的实体封装,其对象支持在非UI组件中创建与传递,便于开发者对弹窗类组件进行解耦封装。ComponentContent底层使用了BuilderNode,相关使用规格参考BuilderNode。
import
{
ComponentContent
}
from
'@kit.ArkUI'
;
//用于设置长度属性,当长度单位为PERCENT时,值为1表示100%。
import
{
LengthMetrics
}
from
'@kit.ArkUI'
;
//创建并显示文本提示框、对话框和操作菜单。
import
{
promptAction
}
from
'@kit.ArkUI'
;
//窗口提供管理窗口的一些基础能力,包括对当前窗口的创建、销毁、各属性设置,以及对各窗口间的管理调度。
//
// 该模块提供以下窗口相关的常用功能:
//
// Window:当前窗口实例,窗口管理器管理的基本单元。
// WindowStage:窗口管理器。管理各个基本窗口单元。
import
{
window
}
from
'@kit.ArkUI'
;
//一种普通标题栏,支持设置标题、头像(可选)和副标题(可选),可用于一级页面、二级及其以上界面配置返回键。
import
{
ComposeTitleBar
}
from
'@kit.ArkUI'
;
//本模块提供通过不同的url访问不同的页面,包括跳转到应用内的指定页面、同应用内的某个页面替换当前页面、返回上一页面或指定的页面等。
//
// 推荐使用Navigation组件作为应用路由框架。
import
{
router
}
from
'@kit.ArkUI'
;
//页签型标题栏,用于页面之间的切换。仅一级页面适用。
import
{
TabTitleBar
}
from
'@kit.ArkUI'
;
class
MyUIAbility
extends
UIAbility
{
}
@Builder
function
buildText
(
params
: object
)
{
Column
(
)
{
}
.
backgroundColor
(
'#FFF0F0F0'
)
}
@Entry
@Component
struct Page14
{
controller
:
webview
.
WebviewController
=
new
webview
.WebviewController
(
)
;
test
(
)
{
router
.
pushUrl
(
{
url
:
'pages/routerpage2'
}
)
let
config
:
window
.
Configuration
=
{
name
:
"test"
,
windowType
:
window
.
WindowType
.
TYPE_DIALOG
,
ctx
:
getContext
(
)
}
;
let
promise
=
window
.
createWindow
(
config
)
;
try
{
promptAction
.
showToast
(
{
message
:
'Hello World'
,
duration
:
2000
}
)
;
}
catch
(
error
)
{
let
message
=
(
error
as
BusinessError
)
.
message
let
code
=
(
error
as
BusinessError
)
.
code
console
.
error
(
`
showToast args error code is
${code
}
, message is
${message
}
`
)
;
}
;
}
aboutToAppear
(
)
:
void
{
LengthMetrics
.
vp
(
3
)
let
uiContext
=
this
.
getUIContext
(
)
;
let
promptAction
=
uiContext
.
getPromptAction
(
)
;
let
contentNode
=
new
ComponentContent
(
uiContext
,
wrapBuilder
(
buildText
)
,
Object
)
;
curves
.
initCurve
(
Curve
.
EaseIn
)
// 创建一个默认先慢后快插值曲线
let
documentPicker
=
new
picker
.DocumentViewPicker
(
getContext
(
)
)
;
storageStatistics
.
getCurrentBundleStats
(
)
.
then
(
(
BundleStats
: storageStatistics
.BundleStats
)
=>
{
console
.
info
(
"getCurrentBundleStats successfully:"
+
JSON
.
stringify
(
BundleStats
)
)
;
}
)
.
catch
(
(
err
: BusinessError
)
=>
{
console
.
error
(
"getCurrentBundleStats failed with error:"
+
JSON
.
stringify
(
err
)
)
;
}
)
;
let
filePath
=
"pathDir/test.txt"
;
fs
.
stat
(
filePath
)
.
then
(
(
stat
: fs
.Stat
)
=>
{
console
.
info
(
"get file info succeed, the size of file is "
+
stat
.
size
)
;
}
)
.
catch
(
(
err
: BusinessError
)
=>
{
console
.
error
(
"get file info failed with error message: "
+
err
.
message
+
", error code: "
+
err
.
code
)
;
}
)
;
let
dataXml
=
new
ArrayBuffer
(
256
)
;
let
pasteData
:
pasteboard
.
PasteData
=
pasteboard
.
createData
(
'app/xml'
,
dataXml
)
;
let
innerEvent
:
emitter
.
InnerEvent
=
{
eventId
:
1
}
;
console
.
info
(
`
marketName:
${deviceInfo
.marketName
}
`
)
let
netConnection
=
connection
.
createNetConnection
(
)
;
http
.
RequestMethod
.
POST
hilog
.
isLoggable
(
0x0001
,
"testTag"
,
)
;
const
color
:
ArrayBuffer
=
new
ArrayBuffer
(
96
)
;
// 96为需要创建的像素buffer大小,取值为:height * width *4
let
opts
:
image
.
InitializationOptions
=
{
editable
:
true
,
pixelFormat
:
3
,
size
:
{
height
:
4
,
width
:
6
}
}
image
.
createPixelMap
(
color
,
opts
)
.
then
(
(
pixelMap
: image
.PixelMap
)
=>
{
console
.
info
(
'Succeeded in creating pixelmap.'
)
;
}
)
.
catch
(
(
error
: BusinessError
)
=>
{
console
.
error
(
`
Failed to create pixelmap. code is
${error
.code
}
, message is
${error
.message
}
`
)
;
}
)
//此处获取的phAccessHelper实例为全局对象,后续使用到phAccessHelper的地方默认为使用此处获取的对象,如未添加此段代码报phAccessHelper未定义的错误请自行添加
let
context
=
getContext
(
this
)
;
let
phAccessHelper
=
photoAccessHelper
.
getPhotoAccessHelper
(
context
)
;
call
.
makeCall
(
"138xxxxxxxx"
,
(
err
: BusinessError
)
=>
{
if
(
err
)
{
console
.
error
(
`
makeCall fail, err->
${
JSON
.
stringify
(err
)
}
`
)
;
}
else
{
console
.
log
(
`
makeCall success
`
)
;
}
}
)
;
let
systemResourceManager
=
resourceManager
.
getSystemResourceManager
(
)
;
let
data
:
systemShare
.
SharedData
=
new
systemShare
.SharedData
(
{
utd
:
utd
.
UniformDataType
.
PLAIN_TEXT
,
content
:
'Hello HarmonyOS'
}
)
;
preferences
.
getPreferencesSync
(
getContext
(
)
,
{
name
:
'myStore'
}
)
let
uiAbilityContext
:
common
.
UIAbilityContext
;
let
permissionName
:
Permissions
=
'ohos.permission.GRANT_SENSITIVE_PERMISSIONS'
;
let
bundleFlags
=
bundleManager
.
BundleFlag
.
GET_BUNDLE_INFO_WITH_APPLICATION
|
bundleManager
.
BundleFlag
.
GET_BUNDLE_INFO_WITH_METADATA
;
let
want
:
Want
=
{
deviceId
:
''
,
// deviceId为空表示本设备
bundleName
:
'com.example.myapplication'
,
abilityName
:
'EntryAbility'
,
moduleName
:
'entry'
// moduleName非必选
}
;
// 定义扫码参数options
let
options
:
scanBarcode
.
ScanOptions
=
{
scanTypes
:
[
scanCore
.
ScanType
.
ALL
]
,
enableMultiMode
:
true
,
enableAlbum
:
true
}
;
// 可调用getContext接口获取当前页面关联的UIAbilityContext
scanBarcode
.
startScanForResult
(
context
,
options
,
(
error
: BusinessError
,
result
: scanBarcode
.ScanResult
)
=>
{
}
)
}
build
(
)
{
Column
(
)
{
ComposeTitleBar
(
{
title
:
"标题"
,
subtitle
:
"副标题"
,
}
)
TabTitleBar
(
{
// swiperContent: this.componentBuilder,
// tabItems: this.tabItems,
// menuItems: this.menuItems,
}
)
}
.
height
(
'100%'
)
.
width
(
'100%'
)
}
}
总结
在使用 HarmonyOS API 时,注意手动导包、使用正确的 @Kit 版本以及确保真机版本的兼容性。这些注意事项和示例代码将帮助你更高效地开发项目。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24984661/viewspace-3107435/ ,如需转载,请注明出处,否则将追究法律责任。