1bf6e62f2S猫头猫import MusicQueue from '@/common/musicQueue'; 29872db12S猫头猫import MusicSheet from '@/common/musicSheetManager'; 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'; 76c6f45bdS猫头猫import {Platform, ToastAndroid} from 'react-native'; 8bf6e62f2S猫头猫import {loadConfig} from '@/common/localConfigManager'; 90d39db21S猫头猫import RNBootSplash from 'react-native-bootsplash'; 106c6f45bdS猫头猫import RNFS, { exists, mkdir } from 'react-native-fs'; 11*233cafa6S猫头猫import DownloadManager from '@/common/downloadManager'; 12bf6e62f2S猫头猫 13bf6e62f2S猫头猫/** app加载前执行 */ 14bf6e62f2S猫头猫export default async function () { 15bf6e62f2S猫头猫 // 检查权限 16bf6e62f2S猫头猫 const [readStoragePermission, writeStoragePermission] = await Promise.all([ 17bf6e62f2S猫头猫 check(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE), 18bf6e62f2S猫头猫 check(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE), 19bf6e62f2S猫头猫 ]); 20bf6e62f2S猫头猫 if ( 21bf6e62f2S猫头猫 !( 22bf6e62f2S猫头猫 readStoragePermission === 'granted' && 23bf6e62f2S猫头猫 writeStoragePermission === 'granted' 24bf6e62f2S猫头猫 ) 25bf6e62f2S猫头猫 ) { 26bf6e62f2S猫头猫 await request(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE); 27bf6e62f2S猫头猫 await request(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE); 28bf6e62f2S猫头猫 } 29bf6e62f2S猫头猫 30bf6e62f2S猫头猫 // 加载配置 31bf6e62f2S猫头猫 await loadConfig(); 32bf6e62f2S猫头猫 // 加载插件 33bf6e62f2S猫头猫 34bf6e62f2S猫头猫 Promise.all([ 350d39db21S猫头猫 await pluginManager.setupPlugins(), 36bf6e62f2S猫头猫 await TrackPlayer.setupPlayer(), 370d39db21S猫头猫 ]); 38bf6e62f2S猫头猫 await TrackPlayer.updateOptions({ 39eb04a812S猫头猫 progressUpdateEventInterval: 2, 40bf6e62f2S猫头猫 stopWithApp: false, 41bf6e62f2S猫头猫 alwaysPauseOnInterruption: true, 42bf6e62f2S猫头猫 capabilities: [ 43bf6e62f2S猫头猫 Capability.Play, 44bf6e62f2S猫头猫 Capability.Pause, 45bf6e62f2S猫头猫 Capability.SkipToNext, 46bf6e62f2S猫头猫 Capability.SkipToPrevious, 47bf6e62f2S猫头猫 ], 48bf6e62f2S猫头猫 compactCapabilities: [ 49bf6e62f2S猫头猫 Capability.Play, 50bf6e62f2S猫头猫 Capability.Pause, 51bf6e62f2S猫头猫 Capability.SkipToNext, 52bf6e62f2S猫头猫 Capability.SkipToPrevious, 53bf6e62f2S猫头猫 ], 54bf6e62f2S猫头猫 notificationCapabilities: [ 55bf6e62f2S猫头猫 Capability.Play, 56bf6e62f2S猫头猫 Capability.Pause, 57bf6e62f2S猫头猫 Capability.SkipToNext, 58bf6e62f2S猫头猫 Capability.SkipToPrevious, 590d39db21S猫头猫 ], 600d39db21S猫头猫 }); 61bf6e62f2S猫头猫 await MusicQueue.setupMusicQueue(); 620d39db21S猫头猫 await MusicSheet.setupMusicSheet(); 636c6f45bdS猫头猫 await setupFolder(); 64*233cafa6S猫头猫 await DownloadManager.setupDownload(); 65bf6e62f2S猫头猫 660d39db21S猫头猫 ErrorUtils.setGlobalHandler(error => 670d39db21S猫头猫 ToastAndroid.show(`error: ${error?.message}`, ToastAndroid.LONG), 680d39db21S猫头猫 ); 69bf6e62f2S猫头猫 // 隐藏开屏动画 70eb04a812S猫头猫 RNBootSplash.hide({fade: true}); 71bf6e62f2S猫头猫} 726c6f45bdS猫头猫 736c6f45bdS猫头猫 746c6f45bdS猫头猫const basePath = 756c6f45bdS猫头猫 (Platform.OS === 'android' 766c6f45bdS猫头猫 ? RNFS.ExternalDirectoryPath 776c6f45bdS猫头猫 : RNFS.DocumentDirectoryPath); 786c6f45bdS猫头猫 796c6f45bdS猫头猫 async function checkAndCreate(path: string) { 806c6f45bdS猫头猫 const filePath = basePath + path; 816c6f45bdS猫头猫 if(!(await exists(filePath))) { 826c6f45bdS猫头猫 await mkdir(filePath); 836c6f45bdS猫头猫 } 846c6f45bdS猫头猫 } 856c6f45bdS猫头猫 /** 初始化 */ 866c6f45bdS猫头猫async function setupFolder(){ 876c6f45bdS猫头猫 await Promise.all([checkAndCreate('/data/')]) 886c6f45bdS猫头猫 896c6f45bdS猫头猫}