你是不是也在想——“鸿蒙这么火,我能不能学会?”
答案是:当然可以!
这个专栏专为零基础小白设计,不需要编程基础,也不需要懂原理、背术语。我们会用最通俗易懂的语言、最贴近生活的案例,手把手带你从安装开发工具开始,一步步学会开发自己的鸿蒙应用。
不管你是学生、上班族、打算转行,还是单纯对技术感兴趣,只要你愿意花一点时间,就能在这里搞懂鸿蒙开发,并做出属于自己的App!
📌 关注本专栏《零基础学鸿蒙开发》,一起变强!
每一节内容我都会持续更新,配图+代码+解释全都有,欢迎点个关注,不走丢,我是小白酷爱学习,我们一起上路 🚀
全文目录:
前言
唉,我就不信,学安卓的时候没踩过权限的坑?
更别提咱这国产亲儿子HarmonyOS(鸿蒙),一套独立生态,想要搞清楚系统级服务、权限声明、签名和沙箱?
好家伙,没两把刷子直接就被劝退!
别怕,今天咱就来一个不啰嗦的真·实战,
多媒体、定位、电话调用,统统搞一遍,外加把权限声明和签名安全机制讲清楚,最后不留坑。
一、鸿蒙应用怎么调用系统级服务?先搞懂这套“能力”体系!
跟安卓类似,HarmonyOS 也是把**系统能力(System Ability)**打包成服务,通过调用系统 API 实现硬件和底层功能访问。
拿最常用的多媒体、定位、电话来说,都是通过**对应的 Ability(能力)+ AbilityKit(能力调用框架)**来实现的。
1️⃣ 多媒体:拍照、录音、播放音视频
来,举个最典型的——调起相机拍照,然后播放拍的照片。
// 使用 @ohos.multimedia.camera
import camera from '@ohos.multimedia.camera';
import media from '@ohos.multimedia.media';
async function takePhoto() {
const cameraManager = camera.getCameraManager();
const cameraDevice = await cameraManager.getCamera('0'); // '0' 表示后摄
const outputUri = '/storage/media/photos/demo.jpg';
cameraDevice.takePhoto({
saveTo: outputUri,
quality: 100,
rotation: 0
}, (err, result) => {
if (err) {
console.error('拍照失败', err);
return;
}
console.info('拍照成功,图片保存到:', outputUri);
});
}
// 播放音频
async function playAudio() {
const audioPlayer = await media.createAudioPlayer();
audioPlayer.src = '/storage/media/audios/demo.mp3';
audioPlayer.play();
}
拍完照怎么找?直接保存到公共目录或者应用沙箱里,按需访问就行。
2️⃣ 定位:获取用户当前位置
定位是大多数 App 的刚需,但千万别忘了动态申请定位权限!
import geolocation from '@ohos.geolocation';
async function getCurrentLocation() {
const location = await geolocation.getCurrentLocation();
console.info(`经度:${location.longitude},纬度:${location.latitude}`);
}
3️⃣ 电话:打个电话喊外卖
别觉得没用,有些 App 真得集成电话功能,比如一键呼叫客服。
import wantAgent from '@ohos.app.ability.wantAgent';
function callPhone(number: string) {
let want = {
action: 'ohos.intent.action.dial',
uri: `tel:${number}`
};
wantAgent.getWantAgent({ wants: [want] }, (err, agent) => {
if (err) {
console.error('创建拨号意图失败:', err);
return;
}
wantAgent.trigger(agent);
});
}
二、权限模型:不是你想调就能调
别说鸿蒙,安卓、iOS 一样的道理——要访问多媒体、定位、电话,这些都是敏感能力,必须先声明再动态申请。
📌 1)静态声明:module.json5 里配好
{
"module": {
"abilities": [
{
"name": "entry",
"permissions": [
"ohos.permission.CAMERA",
"ohos.permission.LOCATION",
"ohos.permission.CALL"
]
}
]
}
}
不声明?编译过不了,系统直接给你卡住。
📌 2)动态申请:requestPermissionsFromUser
声明了还不够,还得在运行时给用户弹窗申请。
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
async function requestCameraPermission() {
const context = getContext(this) as common.UIAbilityContext;
const atManager = abilityAccessCtrl.createAtManager();
const permissions = ['ohos.permission.CAMERA'];
let grantStatus = await atManager.requestPermissionsFromUser(context, permissions);
if (grantStatus[0] === 0) {
console.info('用户授权通过');
} else {
console.warn('用户拒绝了相机权限');
}
}
三、签名 & 沙箱机制:别惦记跨应用偷懒了
别看鸿蒙生态还年轻,安全这一块真没少花心思。
✅ 应用签名:是谁写的,一目了然
- 每个鸿蒙 App 都得签名(开发调试时用默认 Debug Key,生产必须用 Release Key)。
- 安装时,系统会验证签名,保证来源可信,防止被替换。
✅ 沙箱机制:别想着隔墙偷家
- 每个 App 都在自己的沙箱里运行,私有数据(如相册、缓存)默认隔离。
- 想访问别的应用数据?抱歉,除非通过公共接口(比如分布式数据管理)或者显式授权。
四、实战小Tips:踩过的坑别再踩
✅ 签名别丢:一旦上线后换 Key,后续升级都会装不上,用户只能卸了重装,体验巨差。
✅ 别硬改系统能力:能用官方接口就别瞎 Hook 底层,审核不给过不说,后期版本升级直接崩。
✅ 多用调试工具:DevEco Studio 的权限检测、日志工具很好用,别闭眼写,出了 Bug 追都追不回。
结语:鸿蒙生态正香,别拿老套思路来糊弄
咱不吹不黑,鸿蒙真没想象中复杂,但它有自己的玩法,想用好就得老老实实吃透权限、能力调用和签名安全,
别一上来就是“抄安卓”,结果上线一堆权限弹窗吓跑用户。
要是这篇看完,你还有坑没踩透,啧啧啧……那就留言,我接着整,别说我没提醒,鸿蒙不会就得卷起来!
❤️ 如果本文帮到了你…
- 请点个赞,让我知道你还在坚持阅读技术长文!
- 请收藏本文,因为你以后一定还会用上!
- 如果你在学习过程中遇到bug,请留言,我帮你踩坑!
1万+

被折叠的 条评论
为什么被折叠?



