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