回复
【中工开发者】鸿蒙——铃声服务
wx6750466938b06
发布于 2024-12-7 15:50
浏览
0收藏
简介
我是中原工学院的一名学生,通过学习鸿蒙课程所做了一款服务软件。Ringtone service(铃声服务)是一个用于鸿蒙应用中其手机设置铃声的工具库。通过使用Ringtone service,开发者可以在鸿蒙应用中提供铃声设置的功能,用户可以上传铃声文件,自行设置喜欢的铃声。该服务为用户提供简单一致、安全高品质的铃声设置体验。
使用说明
使用前需要使用 hdc
命令,将音频文件推入到手机内。
// 挂载磁盘
hdc target mount
// 推送音乐命令
hdc file send 音乐文件.mp3 /data/app/el2/100/base/com.example.uiextension/haps/entry/files
打开铃声设置Demo页面。
- 输入音乐文件名称,例如
最炫民族风.mp3
,点击按钮设为铃声
。 - 拉起设置铃声弹窗。
- 点击相应的设置按钮,设置不同的铃声类型。
- 点击我的铃声,跳转到系统设置铃声。
工程目录结构
├──entry/src/main
│ └──ets // 代码区
│ ├──entryability
│ │ └──EntryAbility.ets // 程序入口类
│ └──pages // 页面文件
│ └──Index.ets // 主界面
└──entry/src/main/resources // 资源文件目录
主页
import { common } from '@kit.AbilityKit';
import { ringtone } from '@kit.RingtoneKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { promptAction } from '@kit.ArkUI';
import { hilog } from '@kit.PerformanceAnalysisKit';
const APP_TAG = "Msc_Demo"
const DOMAIN = 0x0001
@Entry
@Component
struct Index {
@State isShowUIExtensionCom: boolean = false;
@State uri: string = '';
private buttonText: string = '';
private context = getContext(this) as common.UIAbilityContext;
build() {
Column() {
Column() {
Text($r('app.string.setting_ringtone'))
.fontSize(30)
.fontWeight(FontWeight.Bold)
.fontColor($r('sys.color.ohos_id_color_text_primary'))
.alignSelf(ItemAlign.Start)
.margin({
top: 64,
left: 12,
bottom: 16
})
TextInput({ placeholder: $r('app.string.please_enter_the_file_name') })
.width(312)
.height(40)
.onChange((value: string) => {
this.buttonText = value;
})
}
Button($r('app.string.setting_ringtone'))
.width(312)
.height(40)
.margin({
bottom: 16
})
.onClick(async () => {
if (this.buttonText) {
let audioPath: string = this.context.filesDir + '/' + this.buttonText;
hilog.info(DOMAIN, APP_TAG, 'audioPath:' + audioPath);
try {
let fileName: string = audioPath.substring(audioPath.lastIndexOf('/') + 1, audioPath.lastIndexOf('.'));
hilog.info(DOMAIN, APP_TAG, 'fileName:' + fileName);
await ringtone.startRingtoneSetting(this.context, audioPath, fileName).then(res {
hilog.info(DOMAIN, APP_TAG, 'setFlag :' + res);
});
} catch (error) {
let err: BusinessError = error as BusinessError;
if (err.code === ringtone.RingtoneErrors.ERROR_FILE_NOT_FOUND) {
promptAction.showToast({
message: $r('app.string.file_exist'),
duration: 2000
});
}
hilog.error(DOMAIN, APP_TAG, 'accessSync failed with error message: ' + err.message + ', error code: ' + err.code);
}
} else {
promptAction.showToast({
message: $r('app.string.please_enter_the_file_name'),
duration: 2000
});
}
})
}
.justifyContent(FlexAlign.SpaceBetween)
.width('100%')
.height('100%')
}
}
页面设计
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
}
onDestroy(): void {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
}
onWindowStageCreate(windowStage: window.WindowStage): void {
// Main window is created, set main page for this ability
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
windowStage.loadContent('pages/Index', (err, data) => {
if (err.code) {
hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
return;
}
hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');
});
}
onWindowStageDestroy(): void {
// Main window is destroyed, release UI related resources
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
}
onForeground(): void {
// Ability has brought to foreground
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
}
onBackground(): void {
// Ability has back to background
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
}
}
约束与限制
- 本实例仅支持标准系统上运行,支持设备:华为手机、华为平板。
- HarmonyOS系统:HarmonyOS NEXT Developer Beta3及以上。
- DevEco Studio版本:DevEco Studio NEXT Developer Beta3及以上。
- HarmonyOS SDK版本:HarmonyOS NEXT Developer Beta3 SDK及以上。
总结
对本学期内容知识的理解与掌握
分类
标签
已于2024-12-11 19:04:17修改
赞
收藏
回复
相关推荐