1import MusicQueue from '@/common/musicQueue'; 2import MusicSheet from '@/common/musicSheetManager'; 3import {check, PERMISSIONS, request} from 'react-native-permissions'; 4import TrackPlayer, {Capability} from 'react-native-track-player'; 5import {pluginManager} from '../common/pluginManager'; 6import 'react-native-get-random-values'; 7import {Platform, ToastAndroid} from 'react-native'; 8import {loadConfig} from '@/common/localConfigManager'; 9import RNBootSplash from 'react-native-bootsplash'; 10import RNFS, { exists, mkdir } from 'react-native-fs'; 11 12/** app加载前执行 */ 13export default async function () { 14 // 检查权限 15 const [readStoragePermission, writeStoragePermission] = await Promise.all([ 16 check(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE), 17 check(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE), 18 ]); 19 if ( 20 !( 21 readStoragePermission === 'granted' && 22 writeStoragePermission === 'granted' 23 ) 24 ) { 25 await request(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE); 26 await request(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE); 27 } 28 29 // 加载配置 30 await loadConfig(); 31 // 加载插件 32 33 Promise.all([ 34 await pluginManager.setupPlugins(), 35 await TrackPlayer.setupPlayer(), 36 ]); 37 await TrackPlayer.updateOptions({ 38 progressUpdateEventInterval: 2, 39 stopWithApp: false, 40 alwaysPauseOnInterruption: true, 41 capabilities: [ 42 Capability.Play, 43 Capability.Pause, 44 Capability.SkipToNext, 45 Capability.SkipToPrevious, 46 ], 47 compactCapabilities: [ 48 Capability.Play, 49 Capability.Pause, 50 Capability.SkipToNext, 51 Capability.SkipToPrevious, 52 ], 53 notificationCapabilities: [ 54 Capability.Play, 55 Capability.Pause, 56 Capability.SkipToNext, 57 Capability.SkipToPrevious, 58 ], 59 }); 60 await MusicQueue.setupMusicQueue(); 61 await MusicSheet.setupMusicSheet(); 62 await setupFolder(); 63 64 ErrorUtils.setGlobalHandler(error => 65 ToastAndroid.show(`error: ${error?.message}`, ToastAndroid.LONG), 66 ); 67 // 隐藏开屏动画 68 RNBootSplash.hide({fade: true}); 69} 70 71 72const basePath = 73 (Platform.OS === 'android' 74 ? RNFS.ExternalDirectoryPath 75 : RNFS.DocumentDirectoryPath); 76 77 async function checkAndCreate(path: string) { 78 const filePath = basePath + path; 79 if(!(await exists(filePath))) { 80 await mkdir(filePath); 81 } 82 } 83 /** 初始化 */ 84async function setupFolder(){ 85 await Promise.all([checkAndCreate('/data/')]) 86 87}