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 checkSystemAlertPermission: () => Promise<boolean>; 42 /** 请求悬浮窗 */ 43 requestSystemAlertPermission: () => Promise<boolean>; 44} 45 46const LyricUtil: ILyricUtil = NativeModules.LyricUtil; 47 48const originalShowStatusBarLyric = LyricUtil.showStatusBarLyric; 49 50const showStatusBarLyric: ILyricUtil['showStatusBarLyric'] = async ( 51 initLyric, 52 config, 53) => { 54 try { 55 await originalShowStatusBarLyric(initLyric, config); 56 } catch (e) { 57 Toast.warn('状态栏歌词开启失败,请到手机系统设置打开悬浮窗权限'); 58 Config.set('setting.lyric.showStatusBarLyric', false); 59 } 60}; 61 62LyricUtil.showStatusBarLyric = showStatusBarLyric; 63 64export default LyricUtil; 65