【中工开发者】鸿蒙——铃声服务

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');
  }
}

约束与限制

  1. 本实例仅支持标准系统上运行,支持设备:华为手机、华为平板。
  2. HarmonyOS系统:HarmonyOS NEXT Developer Beta3及以上。
  3. DevEco Studio版本:DevEco Studio NEXT Developer Beta3及以上。
  4. HarmonyOS SDK版本:HarmonyOS NEXT Developer Beta3 SDK及以上。

总结

对本学期内容知识的理解与掌握


分类
已于2024-12-11 19:04:17修改
收藏
回复
举报
回复
    相关推荐