1*09528755S猫头猫import React, {useEffect, useRef, useState} from 'react'; 2*09528755S猫头猫import {AppState, StyleSheet} from 'react-native'; 3*09528755S猫头猫import rpx from '@/utils/rpx'; 4*09528755S猫头猫import AppBar from '@/components/base/appBar'; 5*09528755S猫头猫import VerticalSafeAreaView from '@/components/base/verticalSafeAreaView'; 6*09528755S猫头猫import globalStyle from '@/constants/globalStyle'; 7*09528755S猫头猫import StatusBar from '@/components/base/statusBar'; 8*09528755S猫头猫import ThemeText from '@/components/base/themeText'; 9*09528755S猫头猫import ListItem from '@/components/base/listItem'; 10*09528755S猫头猫import ThemeSwitch from '@/components/base/switch'; 11*09528755S猫头猫import LyricUtil from '@/native/lyricUtil'; 12*09528755S猫头猫import NativeUtils from '@/native/utils'; 13*09528755S猫头猫 14*09528755S猫头猫type IPermissionTypes = 'floatingWindow' | 'fileStorage'; 15*09528755S猫头猫 16*09528755S猫头猫export default function Permissions() { 17*09528755S猫头猫 const appState = useRef(AppState.currentState); 18*09528755S猫头猫 const [permissions, setPermissions] = useState< 19*09528755S猫头猫 Record<IPermissionTypes, boolean> 20*09528755S猫头猫 >({ 21*09528755S猫头猫 floatingWindow: false, 22*09528755S猫头猫 fileStorage: false, 23*09528755S猫头猫 // background: false, 24*09528755S猫头猫 }); 25*09528755S猫头猫 26*09528755S猫头猫 async function checkPermission(type?: IPermissionTypes) { 27*09528755S猫头猫 let newPermission = { 28*09528755S猫头猫 ...permissions, 29*09528755S猫头猫 }; 30*09528755S猫头猫 if (!type || type === 'floatingWindow') { 31*09528755S猫头猫 const hasPermission = await LyricUtil.checkSystemAlertPermission(); 32*09528755S猫头猫 newPermission.floatingWindow = hasPermission; 33*09528755S猫头猫 } 34*09528755S猫头猫 if (!type || type === 'fileStorage') { 35*09528755S猫头猫 const hasPermission = await NativeUtils.checkStoragePermission(); 36*09528755S猫头猫 console.log('HAS', hasPermission); 37*09528755S猫头猫 newPermission.fileStorage = hasPermission; 38*09528755S猫头猫 } 39*09528755S猫头猫 // if (!type || type === 'background') { 40*09528755S猫头猫 41*09528755S猫头猫 // } 42*09528755S猫头猫 43*09528755S猫头猫 setPermissions(newPermission); 44*09528755S猫头猫 } 45*09528755S猫头猫 46*09528755S猫头猫 useEffect(() => { 47*09528755S猫头猫 checkPermission(); 48*09528755S猫头猫 const subscription = AppState.addEventListener( 49*09528755S猫头猫 'change', 50*09528755S猫头猫 nextAppState => { 51*09528755S猫头猫 if ( 52*09528755S猫头猫 appState.current.match(/inactive|background/) && 53*09528755S猫头猫 nextAppState === 'active' 54*09528755S猫头猫 ) { 55*09528755S猫头猫 checkPermission(); 56*09528755S猫头猫 } 57*09528755S猫头猫 58*09528755S猫头猫 appState.current = nextAppState; 59*09528755S猫头猫 }, 60*09528755S猫头猫 ); 61*09528755S猫头猫 62*09528755S猫头猫 return () => { 63*09528755S猫头猫 subscription.remove(); 64*09528755S猫头猫 }; 65*09528755S猫头猫 }, []); 66*09528755S猫头猫 67*09528755S猫头猫 return ( 68*09528755S猫头猫 <VerticalSafeAreaView style={globalStyle.fwflex1}> 69*09528755S猫头猫 <StatusBar /> 70*09528755S猫头猫 <AppBar>权限管理</AppBar> 71*09528755S猫头猫 <ThemeText style={styles.description}> 72*09528755S猫头猫 此处列出了本 APP 73*09528755S猫头猫 需要的所有权限,你可以从这里开启或关闭某些权限。 74*09528755S猫头猫 </ThemeText> 75*09528755S猫头猫 <ListItem 76*09528755S猫头猫 withHorizonalPadding 77*09528755S猫头猫 heightType="big" 78*09528755S猫头猫 onPress={() => { 79*09528755S猫头猫 LyricUtil.requestSystemAlertPermission(); 80*09528755S猫头猫 }}> 81*09528755S猫头猫 <ListItem.Content 82*09528755S猫头猫 title="悬浮窗权限" 83*09528755S猫头猫 description="用以展示桌面歌词" 84*09528755S猫头猫 /> 85*09528755S猫头猫 <ThemeSwitch value={permissions.floatingWindow} /> 86*09528755S猫头猫 </ListItem> 87*09528755S猫头猫 <ListItem 88*09528755S猫头猫 withHorizonalPadding 89*09528755S猫头猫 heightType="big" 90*09528755S猫头猫 onPress={() => { 91*09528755S猫头猫 NativeUtils.requestStoragePermission(); 92*09528755S猫头猫 }}> 93*09528755S猫头猫 <ListItem.Content 94*09528755S猫头猫 title="文件读写权限" 95*09528755S猫头猫 description="用以下载歌曲、缓存数据" 96*09528755S猫头猫 /> 97*09528755S猫头猫 <ThemeSwitch value={permissions.fileStorage} /> 98*09528755S猫头猫 </ListItem> 99*09528755S猫头猫 {/* <ListItem withHorizonalPadding heightType="big"> 100*09528755S猫头猫 <ListItem.Content 101*09528755S猫头猫 title="后台运行" 102*09528755S猫头猫 description="用以在后台播放音乐"></ListItem.Content> 103*09528755S猫头猫 <ThemeSwitch value={permissions.background}></ThemeSwitch> 104*09528755S猫头猫 </ListItem> */} 105*09528755S猫头猫 </VerticalSafeAreaView> 106*09528755S猫头猫 ); 107*09528755S猫头猫} 108*09528755S猫头猫 109*09528755S猫头猫const styles = StyleSheet.create({ 110*09528755S猫头猫 description: { 111*09528755S猫头猫 width: '100%', 112*09528755S猫头猫 paddingHorizontal: rpx(24), 113*09528755S猫头猫 marginVertical: rpx(36), 114*09528755S猫头猫 }, 115*09528755S猫头猫}); 116