1import Config from '@/core/config'; 2import Toast from '@/utils/toast'; 3import {NativeModule, NativeModules} from 'react-native'; 4 5export enum NativeTextAlignment { 6 // 左对齐 7 LEFT = 3, 8 // 右对齐 9 RIGHT = 5, 10 // 居中 11 CENTER = 17, 12} 13 14// 状态栏歌词的工具 15interface ILyricUtil extends NativeModule { 16 /** 显示状态栏歌词 */ 17 showStatusBarLyric: ( 18 initLyric?: string, 19 config?: Record<string, any>, 20 ) => Promise<void>; 21 /** 隐藏状态栏歌词 */ 22 hideStatusBarLyric: () => Promise<void>; 23 /** 设置歌词文本 */ 24 setStatusBarLyricText: (lyric: string) => Promise<void>; 25 /** 设置距离顶部的距离 */ 26 setStatusBarLyricTop: (percent: number) => Promise<void>; 27 /** 设置距离左部的距离 */ 28 setStatusBarLyricLeft: (percent: number) => Promise<void>; 29 /** 设置宽度 */ 30 setStatusBarLyricWidth: (percent: number) => Promise<void>; 31 /** 设置字体 */ 32 setStatusBarLyricFontSize: (fontSize: number) => Promise<void>; 33 /** 设置对齐 */ 34 setStatusBarLyricAlign: (alignment: NativeTextAlignment) => Promise<void>; 35 /** 设置颜色 */ 36 setStatusBarColors: ( 37 textColor: string | null, 38 backgroundColor: string | null, 39 ) => Promise<void>; 40} 41 42const LyricUtil: ILyricUtil = NativeModules.LyricUtil; 43 44const originalShowStatusBarLyric = LyricUtil.showStatusBarLyric; 45 46const showStatusBarLyric: ILyricUtil['showStatusBarLyric'] = async ( 47 initLyric, 48 config, 49) => { 50 try { 51 await originalShowStatusBarLyric(initLyric, config); 52 } catch (e) { 53 Toast.warn('状态栏歌词开启失败,请到手机系统设置打开悬浮窗权限'); 54 Config.set('setting.lyric.showStatusBarLyric', false); 55 } 56}; 57 58LyricUtil.showStatusBarLyric = showStatusBarLyric; 59 60export default LyricUtil; 61