首页 > 其他分享 >鸿蒙os4开发敲木鱼

鸿蒙os4开发敲木鱼

时间:2023-09-22 19:01:41浏览次数:48  
标签:info AVPlayer console 鸿蒙 木鱼 state os4 break avPlayer

初次学习harmonyos,对此一知半解,算是勉强实现了,使用的是arkts

主要用到了图片控件,点击事件,音频播放等功能

此app只有一个页面,所以只粘贴该文件的代码以及音频文件的存放位置

import {TitleComponent} from '../view/TitleComponent'
import media from '@ohos.multimedia.media'
import fileIO from '@ohos.fileio'
import common from '@ohos.app.ability.common'
import fs from '@ohos.file.fs'
@Entry
@Component
struct Index {
  content: string = '积攒功德吧'
  @State count:number = 0
  @State imageWidth:number = 180
  private avPlayer
  private playcount


  build() {
    Flex({direction:FlexDirection.Column}){
      TitleComponent({content:this.content})
      Flex({
        justifyContent:FlexAlign.Center,
        alignItems:ItemAlign.Center,
        direction:FlexDirection.Column
      }){
        Image($r("app.media.muyu"))
          .objectFit(ImageFit.Fill)
          .width(this.imageWidth).height("auto")
          .animation({
            duration: 100,
            curve: Curve.FastOutSlowIn,
            iterations: 1,
            playMode: PlayMode.Normal
          })
          .onClick(()=>{
            this.count++
            this.imageWidth = 200
            // this.playcount = 0
            this.avPlayer.play()
            setTimeout(()=>{
              this.imageWidth = 180
            },100)
          })


        Text("功德木鱼").fontSize(25).fontWeight(FontWeight.Bolder).margin({top:15})

        Text("功德 : "+this.count).fontSize(25).fontWeight(FontWeight.Bolder).margin({top:15})
      }
      .margin({top:30})
      // .border({width:1})
      .width("100%")
      .height("60%")
    }
  }

  async getMusic(){
    //文件系统看文档有点迷糊
    let context = getContext(this) as common.UIAbilityContext
    let resourceManager = context.resourceManager
    this.avPlayer = await media.createAVPlayer()
    this.setAVPlayerCallback();
    //各种瞎蒙,才找到了音频文件的位置
    let filePath = await context.resourceManager.getRawFd("muyuyinpin.wav")
    this.avPlayer.fdSrc = filePath

  }

  aboutToAppear(){
    this.getMusic()

  }


  // 注册avplayer回调函数
  setAVPlayerCallback() {
    // seek操作结果回调函数
    this.avPlayer.on('seekDone', (seekDoneTime) => {
      console.info(`*******************AVPlayer seek succeeded, seek time is ${seekDoneTime}`);
    })
    // error回调监听函数,当avPlayer在操作过程中出现错误时调用reset接口触发重置流程
    this.avPlayer.on('error', (err) => {
      console.error(`*******************Invoke avPlayer failed, code is ${err.code}, message is ${err.message}`);
      this.avPlayer.reset(); // 调用reset重置资源,触发idle状态
    })
    // 状态机变化回调函数
    this.avPlayer.on('stateChange', async (state, reason) => {
      switch (state) {
        case 'idle': // 成功调用reset接口后触发该状态机上报
          console.info('*******************AVPlayer state idle called.');
          // this.avPlayer.release(); // 调用release接口销毁实例对象
          break;
        case 'initialized': // avplayer 设置播放源后触发该状态上报
          console.info('*******************AVPlayerstate initialized called.');
          this.avPlayer.prepare().then(() => {
            console.info('*******************AVPlayer prepare succeeded.');
          }, (err) => {
            console.error(`*******************Invoke prepare failed, code is ${err.code}, message is ${err.message}`);
          });
          break;
        case 'prepared': // prepare调用成功后上报该状态机
          console.info('*******************AVPlayer state prepared called.');
          this.avPlayer.play(); // 调用播放接口开始播放
          break;
        case 'playing': // play成功调用后触发该状态机上报
          console.info('*******************AVPlayer state playing called.');
          // if (this.playcount !== 0) {
          //   console.info('*******************AVPlayer start to seek.');
          //   this.avPlayer.seek(this.avPlayer.duration); //seek到音频末尾
          // } else {
          //   this.avPlayer.pause(); // 调用暂停接口暂停播放
          // }
          // this.playcount++;
          break;
        case 'paused': // pause成功调用后触发该状态机上报
          console.info('*******************AVPlayer state paused called.');
          this.avPlayer.play(); // 再次播放接口开始播放
          break;
        case 'completed': // 播放结束后触发该状态机上报
          console.info('*******************AVPlayer state completed called.');
          //this.avPlayer.stop(); //调用播放结束接口
          this.avPlayer.seek(0)
          break;
        case 'stopped': // stop接口成功调用后触发该状态机上报
          console.info('*******************AVPlayer state stopped called.');
          this.avPlayer.reset(); // 调用reset接口初始化avplayer状态
          break;
        case 'released':
          console.info('*******************AVPlayer state released called.');
          break;
        default:
          console.info('*******************AVPlayer state unknown called.');
          break;
      }
    })
  }



}

鸿蒙os4开发敲木鱼_鸿蒙

鸿蒙os4开发敲木鱼_木鱼_02

标签:info,AVPlayer,console,鸿蒙,木鱼,state,os4,break,avPlayer
From: https://blog.51cto.com/u_15668841/7570211

相关文章

  • 鸿蒙生态
    HUAWEIDevEcoStudio:鸿蒙生态应用、元服务开发配套的集成开发环境(IDE),提供了工程管理、代码编辑、界面预览、编译构建、代码调试等基础功能,同时还集成了性能调优工具、设备模拟工具、命令行工具等帮助开发者解决特定领域的问题。SDK:集成在HUAWEIDevEcoStudio中,包含开发者可......
  • 鸿蒙元服务开发教程03:从底层原理开始讲透桌面卡片的router事件刷新机制
    相关文章:鸿蒙元服务开发教程:从底层原理开始讲透桌面卡片的call事件刷新机制鸿蒙元服务开发教程02:从底层原理开始讲透桌面卡片的message事件刷新机制首先铺垫两个基础知识:1.为什么桌面卡片需要使用特殊机制来刷新?主要有两个原因:第一是HarmonyOSApi9的桌面卡片出于降低系统能耗的目......
  • 【技术视界】鸿蒙开发套件之DevEco Profiler助您轻松分析应用性能问题
     作者:shizhengtao,华为性能调优工具专家应用的性能优化一直以来都是开发者所面临的一大难题,在2023HDC大会上全新亮相的HarmonyOS NEXT开发者预览版,其中鸿蒙开发套件DevEco Profiler,对应用卡顿这一问题的定位解决又提供了哪些能力呢?本文带你一探究竟。一、Realtime Monitor,......
  • 【技术视界】鸿蒙开发套件之DevEco Profiler助您轻松分析应用性能问题
    作者:shizhengtao,华为性能调优工具专家应用的性能优化一直以来都是开发者所面临的一大难题,在2023HDC大会上全新亮相的HarmonyOS NEXT开发者预览版,其中鸿蒙开发套件DevEco Profiler,对应用卡顿这一问题的定位解决又提供了哪些能力呢?本文带你一探究竟。一Realtime Monitor,高效发现卡......
  • 通过实例学习鸿蒙动态库的创建与使用
    【本文正在参加2023「盲盒」+码有奖征文活动】,活动链接https://ost.51cto.com/posts/25284简要介绍动态共享包HSP(HarmonySharedPackage),是为了实现在不同HAP之间代码和资源的共享,HAR中的代码和资源跟随使用方编译,但HSP中的代码和资源可以独立编译,运行时在一个进程中,代码也只......
  • 学习鸿蒙应用开发
    鸿蒙应用开发是华为公司推出的一种全场景分布式操作系统,它提供了丰富的开发框架和工具,用于开发应用程序。应用程序生命周期:在鸿蒙应用开发中,应用程序的生命周期是指应用程序从启动到关闭的整个过程。鸿蒙应用的生命周期包括以下几个阶段:应用创建:当用户启动应用程序时,系统会创建应......
  • 鸿蒙开发基础知识和环境搭建详解
    鸿蒙开发学习方案:学习基础知识:了解鸿蒙的基本概念和特点,包括其分布式架构、能力和开发理念。学习鸿蒙的开发环境搭建,包括安装开发工具和配置开发环境。学习鸿蒙应用开发:学习鸿蒙应用开发框架,包括应用程序生命周期、界面设计和布局、事件处理等。学习鸿蒙应用的数据存储和管理,包括文......
  • fiddler抓包手机端HTTPS协议:安卓或鸿蒙端-小程序/APP
    问题描述:fiddler抓包安卓或者鸿蒙端的HTTPS协议时,fiddler日志报错:AuthenticationException调用SSPI失败;访问app时提示:Trustanchorforcertificationnotfound原因:    1)安卓端下载使用了fiddler自带的HTTPS证书,导致与手机版本不兼容    2)andriod7以后,用户......
  • 鸿蒙万能卡片开发详解-记忆翻牌游戏
    (目录)1.前言      翻牌游戏万能卡片,随机生成16张共包含8张完全不同的图像,游戏的目标是在有限30秒时间内,将16张卡片中包含相同的图像的卡片两两配对。匹配的规则是连续点击两张卡片,若卡背面的图像相同,则匹配成功,若不同则配对失败。游戏主要考察玩家的记忆力,因为游戏还规定......
  • 【HarmonyOS】鸿蒙应用获取华为帐号手机号码步骤(API7及以下)
    ​【写在前面】本文主要介绍使用API7及以下版本开发HarmonyOS应用时,通过华为帐号SDK和云侧接口获取手机号码的主要开发步骤,注意:开发过程中集成的华为帐号SDK仅支持API7及以下版本的HarmonyOS应用。 【前提准备】1、HarmonyOS应用已申请获取手机号码的权限,申请权限文档请参考......