import MusicQueue from '@/common/musicQueue'; import MusicSheet from '@/common/musicSheetManager'; import {check, PERMISSIONS, request} from 'react-native-permissions'; import TrackPlayer, {Capability} from 'react-native-track-player'; import {pluginManager} from '../common/pluginManager'; import 'react-native-get-random-values'; import {Platform, ToastAndroid} from 'react-native'; import {loadConfig} from '@/common/localConfigManager'; import RNBootSplash from 'react-native-bootsplash'; import RNFS, {exists, mkdir} from 'react-native-fs'; import DownloadManager from '@/common/downloadManager'; import pathConst from '@/constants/pathConst'; import {checkAndCreateDir} from '@/utils/fileUtils'; import {errorLog} from '@/common/logManager'; import MediaMetaManager from '@/common/mediaMetaManager'; /** app加载前执行 */ export default async function () { // 检查权限 const [readStoragePermission, writeStoragePermission] = await Promise.all([ check(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE), check(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE), ]); if ( !( readStoragePermission === 'granted' && writeStoragePermission === 'granted' ) ) { await request(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE); await request(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE); } /** 初始化路径 */ await setupFolder(); // 加载配置 await loadConfig(); // 加载插件 Promise.all([ await pluginManager.setupPlugins(), await TrackPlayer.setupPlayer(), await MediaMetaManager.setupMediaMeta(), ]); await TrackPlayer.updateOptions({ progressUpdateEventInterval: 0.8, stopWithApp: false, alwaysPauseOnInterruption: true, capabilities: [ Capability.Play, Capability.Pause, Capability.SkipToNext, Capability.SkipToPrevious, ], compactCapabilities: [ Capability.Play, Capability.Pause, Capability.SkipToNext, Capability.SkipToPrevious, ], notificationCapabilities: [ Capability.Play, Capability.Pause, Capability.SkipToNext, Capability.SkipToPrevious, ], }); await MusicQueue.setupMusicQueue(); await MusicSheet.setupMusicSheet(); await DownloadManager.setupDownload(); ErrorUtils.setGlobalHandler(error => { errorLog('未捕获的错误', error); }); // 隐藏开屏动画 RNBootSplash.hide({fade: true}); } /** 初始化 */ async function setupFolder() { await Promise.all([ checkAndCreateDir(pathConst.dataPath), checkAndCreateDir(pathConst.logPath), checkAndCreateDir(pathConst.cachePath), checkAndCreateDir(pathConst.storagePath), checkAndCreateDir(pathConst.pluginPath), checkAndCreateDir(pathConst.lrcCachePath) ]); }