王士厅

音频悬浮窗问题

... ... @@ -27,6 +27,7 @@ import TrackingPageBrowseUtils from '../../utils/TrackingPageBrowseUtils'
import {TrackConstants,TrackParamConvert}from 'wdTracking/Index'
import { ColorUtils } from '../../utils/ColorUtils';
import { EmptyComponent,WDViewDefaultType } from '../view/EmptyComponent';
import { EmitterEventId, EmitterUtils } from 'wdKit/Index'
const TAG = 'MorningEveningPaperComponent';
... ... @@ -71,6 +72,7 @@ export struct MorningEveningPaperComponent {
@State bottomSafeHeight: number = 0;
@State isHasTopView: boolean = false;
@State scrollOffset: number = 0
@State currentStatus: number | string |undefined = 0;
private audioDataList: AudioDataList[] = []
private playerController: WDPlayerController = new WDPlayerController();
... ... @@ -182,6 +184,10 @@ export struct MorningEveningPaperComponent {
}
EmitterUtils.receiveEvent(EmitterEventId.AUDIO_CHANGE_STATUS, (val: number | string | undefined) => {
this.currentStatus = val
})
}
// 批量查询内容当前用户点赞、收藏状态评论个数
... ... @@ -338,7 +344,7 @@ export struct MorningEveningPaperComponent {
.height('100%')
.objectFit(ImageFit.Contain)
Image($r('app.media.ic_red_triangle'))
Image(this.currentStatus === PlayerConstants.STATUS_START ? $r("app.media.icon_audio_pause") : $r("app.media.icon_audio_playing"))
.width(24)
.height(24)
.margin({ left: 10 })// .alignSelf(ItemAlign.Center)
... ...
... ... @@ -16,6 +16,7 @@ export class AudioSuspensionModel {
private url: string = ''
private expandWidth: number = vp2px(243)
private expandHeight: number = vp2px(60)
private initMoveX = vp2px(12)
// 窗口是否最小化
private isMinimize: SubscribedAbstractProperty<boolean> = AppStorage.link<boolean>('isMinimize')
constructor() {
... ... @@ -27,7 +28,7 @@ export class AudioSuspensionModel {
private initPlayerController() {
if(this.playerController === undefined) {
Logger.info(TAG, 'playerController undefined')
AppStorage.setOrCreate('playerController', new WDPlayerController());
AppStorage.setOrCreate('playerController', new WDPlayerController({loop: false}));
this.playerController = AppStorage.link<WDPlayerController>('playerController')
Logger.info(TAG, 'playerController create success')
this.playerController.get().onStatusChange = (status: number) => {
... ... @@ -42,8 +43,8 @@ export class AudioSuspensionModel {
* 配置音频地址
*/
public setPlayerUrl(url: string, srcTitle: string) {
// console.log(TAG,'this.url', this.url)
// console.log(TAG,'url', url)
/*console.log(TAG,'this.url', this.url)
console.log(TAG,'url', url)*/
if (this.url === url) {
this.isMinimize = AppStorage.link<boolean>('isMinimize')
console.log(TAG, 'this.isMinimize', this.isMinimize?.get())
... ... @@ -60,7 +61,7 @@ export class AudioSuspensionModel {
}
this.srcTitle = srcTitle
EmitterUtils.sendEvent(EmitterEventId.AUDIO_CHANGE_TITLe, this.srcTitle)
this.resizeWindow(this.expandWidth, this.expandHeight)
EmitterUtils.sendEvent(EmitterEventId.AUDIO_WINDOW_EXPAND, 1)
}
this.showWindow()
}
... ... @@ -99,9 +100,8 @@ export class AudioSuspensionModel {
console.info(TAG, 'floatWindowClass Succeeded in changing the window size.');
});
}
public moveWindow(y: number) {
this.floatWindowClass.get().moveWindowTo(0, vp2px(y), (err: BusinessError) => {
this.floatWindowClass.get().moveWindowTo(this.initMoveX, vp2px(y), (err: BusinessError) => {
let errCode: number = err.code;
if (errCode) {
console.error('floatWindowClass Failed to move the window. Cause:' + JSON.stringify(err));
... ...
... ... @@ -7,13 +7,17 @@ import { TrackingPlay } from 'wdTracking/Index';
import { ParamType } from 'wdTracking/Index';
import { DateTimeUtils } from 'wdKit/Index';
interface obj {
loop: boolean
}
@Observed
export class WDPlayerController {
private initPromise: Promise<void>;
private avPlayer?: media.AVPlayer;
private duration: number = 0;
private status: number = PlayerConstants.STATUS_IDLE;
private loop: boolean = false;
private loop: boolean = true;
private url: string = '';
private surfaceId: string = ''; // 若播放音频,无需设置surfaceId
private playSpeed: number = 1;
... ... @@ -41,9 +45,12 @@ export class WDPlayerController {
constructor() {
constructor(obj?: obj) {
Logger.error("初始化")
this.initPromise = this.createAVPlayer();
if(obj?.loop === false) {
this.loop = false
}
}
/**
... ... @@ -103,6 +110,7 @@ export class WDPlayerController {
if (this.onCanplay) {
this.onCanplay()
}
this.avPlayer.loop = this.loop
break;
case AVPlayerStatus.PLAYING:
if(this.onLoaded) {
... ... @@ -122,10 +130,14 @@ export class WDPlayerController {
if (this.continue) {
this.continue();
} else {
if(this.loop) {
this.duration = 0;
this.url = this.avPlayer.url || '';
this.avPlayer.reset();
}
this.status = PlayerConstants.STATUS_COMPLETION;
this.watchStatus();
}
break;
case AVPlayerStatus.RELEASED:
this.avPlayer.release();
... ... @@ -396,7 +408,7 @@ export class WDPlayerController {
watchStatus() {
console.log('watchStatus', this.status)
if(this.status == 1){
if(this.status == PlayerConstants.STATUS_START){
console.log('播放视频')
console.log('播放视频prepareTime',JSON.stringify(this.prepareTime))
console.log('播放视频pageName',JSON.stringify(this.pageName))
... ... @@ -404,7 +416,7 @@ export class WDPlayerController {
// 播放埋点
TrackingPlay.videoPositivePlay(Number(this.prepareTime),this.pageName, this.pageName, this.pageParam)
}
if(this.status == 2){
if(this.status == PlayerConstants.STATUS_COMPLETION){
let initDuration = Math.floor(Number(this.duration)/1000)
console.log('播放结束')
console.log('播放结束currentPlayTime',JSON.stringify(this.currentPlayTime))
... ...
... ... @@ -57,8 +57,9 @@ export default class EntryAbility extends UIAbility {
AppStorage.setOrCreate('topSafeHeight', topSafeHeight);
AppStorage.setOrCreate('windowWidth', width);
AppStorage.setOrCreate('windowHeight', height);
// 音频悬浮窗初始移动位置604为ui高度
let initMoveY = vp2px(604)
// 音频悬浮窗初始移动位置604为ui高度, 下面的初始位置根据mate60 pro手动调整
let initMoveY = vp2px(576)
let initMoveX = vp2px(12)
this.onWindowSetup(windowClass)
... ... @@ -81,7 +82,7 @@ export default class EntryAbility extends UIAbility {
floatWindowClass = data;
AppStorage.setOrCreate('floatWindowClass', floatWindowClass);
// 2.悬浮窗窗口创建成功后,设置悬浮窗的位置、大小及相关属性等。
floatWindowClass.moveWindowTo(0, initMoveY, (err: BusinessError) => {
floatWindowClass.moveWindowTo(initMoveX, initMoveY, (err: BusinessError) => {
let errCode: number = err.code;
if (errCode) {
Logger.error('floatWindowClass Failed to move the window. Cause:' + JSON.stringify(err));
... ...
... ... @@ -40,11 +40,11 @@ struct Index {
EmitterUtils.receiveEvent(EmitterEventId.AUDIO_CHANGE_STATUS, (val: number | string | undefined) => {
// val 2 pause
if(val === 2) {
console.log(TAG,'this.currentStatus 2 ', val)
if(val === PlayerConstants.STATUS_PAUSE || val === PlayerConstants.STATUS_COMPLETION) {
console.log(TAG,'AUDIO_CHANGE_STATUS this.currentStatus 2 ', val)
lottie.pause(this.name)
} else if(val === 1) {
console.log(TAG,'this.currentStatus 1 ', val)
} else if(val === PlayerConstants.STATUS_START) {
console.log(TAG,'AUDIO_CHANGE_STATUS this.currentStatus 1 ', val)
lottie.play(this.name)
}
this.currentStatus = val
... ... @@ -76,7 +76,7 @@ struct Index {
build() {
Stack({ alignContent: Alignment.End }) {
if(this.isExpand) {
Stack({ alignContent: Alignment.End }) {
Column() { //标题 时间 进度条
Marquee({
start: true,
... ... @@ -156,7 +156,9 @@ struct Index {
}
.width(80)
.height(60)
} else {
}
.visibility(this.isExpand ? Visibility.Visible : Visibility.Hidden)
Row() {
LottieView({
name: this.name,
... ... @@ -170,7 +172,7 @@ struct Index {
.justifyContent(FlexAlign.Center)
.width(60)
.height(60)
}
.visibility(!this.isExpand ? Visibility.Visible : Visibility.Hidden)
}
.parallelGesture(
GestureGroup(GestureMode.Parallel,
... ...