1import MusicQueue from '@/common/musicQueue'; 2import MusicSheet from '@/common/musicSheet'; 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 {ToastAndroid} from 'react-native'; 8import { loadConfig } from '@/common/localConfigManager'; 9 10/** app加载前执行 */ 11export default async function () { 12 // 检查权限 13 const [readStoragePermission, writeStoragePermission] = await Promise.all([ 14 check(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE), 15 check(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE), 16 ]); 17 if ( 18 !( 19 readStoragePermission === 'granted' && 20 writeStoragePermission === 'granted' 21 ) 22 ) { 23 await request(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE); 24 await request(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE); 25 } 26 27 // 加载配置 28 await loadConfig(); 29 // 加载插件 30 31 Promise.all([ 32 await pluginManager.initPlugins(), 33 await TrackPlayer.setupPlayer(), 34 await TrackPlayer.updateOptions({ 35 stopWithApp: false, 36 alwaysPauseOnInterruption: true, 37 capabilities: [ 38 Capability.Play, 39 Capability.Pause, 40 Capability.SkipToNext, 41 Capability.SkipToPrevious, 42 ], 43 compactCapabilities: [ 44 Capability.Play, 45 Capability.Pause, 46 Capability.SkipToNext, 47 Capability.SkipToPrevious, 48 ], 49 notificationCapabilities: [ 50 Capability.Play, 51 Capability.Pause, 52 Capability.SkipToNext, 53 Capability.SkipToPrevious, 54 ] 55 }) 56 ]); 57 // musicController.initMusicControl(); 58 await MusicQueue.setupMusicQueue(); 59 await MusicSheet.initMusicSheet(); 60 61 ErrorUtils.setGlobalHandler(error => ToastAndroid.show(`error: ${error?.message}`, ToastAndroid.LONG)); 62 // 隐藏开屏动画 63} 64