typescript - Expo Location არ მუშაობს Android მოწყობილობაზე
მე მაქვს პრობლემა ჩემს ანდროიდ მოწყობილობაზე. ფუნქციები getCurrentPositionAsync და watchPositionAsync კარგად მუშაობს ჩემს iOS მოწყობილობაზე, ანდროიდ ემულატორზე და ასევე ანდროიდ სიმულატორზე, რომელიც გაშვებულია Expo Go-ის საშუალებით, მაგრამ არ მუშაობს ჩემს ანდროიდ მოწყობილობაზე, როდესაც ვქმნი APK ან AAB ფაილს expo build:android-ის გამოყენებით.
აი simplified კომპონენტი, რომელიც იღებს ადგილმდებარეობას: availability-box-android.component.tsx
const AvailabilityBoxAndroid = () => {
const appContext = useContext(AppContext);
const [isLoading, setIsLoading] = useState<boolean>(true);
const [locationErrorMessage, setLocationErrorMessage] = useState<String>('');
const [androidLocation, setAndroidLocation] = useState(null);
useEffect(() => {
const states: StandardButtonStates = {
on: {
isActive: isLocationServicesAvailable && adHocAvailabilityStatus,
appearance: 'ghost',
onPress: handleAdHocAvailabilityButtonPressOff,
text: t('Set unavailable'),
},
off: {
isActive: isLocationServicesAvailable && !adHocAvailabilityStatus,
appearance: 'ghost',
onPress: handleAdHocAvailabilityButtonPressOn,
text: t('Set available'),
},
disabled: {
isActive: !isLocationServicesAvailable,
text: t('Set available (Location disabled)'),
},
};
}, [
androidLocation,
]);
const handleAdHocAvailabilityButtonPressOn = async () => {
setIsLoading(true);
let { status } = await ExpoLocation.requestForegroundPermissionsAsync();
if (status !== 'granted') {
setLocationErrorMessage('Permission to access location was denied');
return;
}
let location = await ExpoLocation.getCurrentPositionAsync({});
setAndroidLocation(location);
}};
const handleAdHocAvailabilityButtonPressOff = async () => {
setIsLoading(true);
setAndroidLocation(null);
return;
};
return (
<ContentBox
Title={
<View
style={{
flexDirection: 'row',
alignContent: 'stretch',
justifyContent: 'space-between',
}}
>
<View style={{ flexDirection: 'row' }}>
<View
style={{
height: 18,
width: 18,
backgroundColor: adHocAvailabilityStatus ? 'green' : 'red',
borderRadius: 18 / 2,
}}
></View>
<Text style={{ paddingLeft: 10, textTransform: 'uppercase' }}>
{adHocAvailabilityStatus ? t('available') + '' : t('unavailable') + ''}
</Text>
</View>
<View style={{ flexDirection: 'row' }}>
<LocationIcon
active={locationForegroundPermissionResponse?.granted === true}
/>
<Text
style={{
fontFamily: 'Lato_700Bold',
marginLeft: 15,
}}
>
{locationName ? locationName + '' : 'Location not known'}
</Text>
</View>
</View>
}
Content={
<View
style={{
flex: 1,
justifyContent: 'center',
alignItems: 'center',
}}
>
<StandardButton
states={adHocAvailabilityButtonStates}
isLoading={isLoading}
></StandardButton>
{<Text>{JSON.stringify(androidLocation)}</Text>}
<Text>{locationErrorMessage + ''}</Text>
</View>
}
></ContentBox>
);
};
ვცადე ახალი პროექტის შექმნა მხოლოდ ლოკაციით და ეს ფუნქცია იმუშავა, ამიტომ ვფიქრობ, პრობლემას შესაძლოა ჩემს წინააღმდეგმორღვევად ჩამოთვლილ ბიბლიოთეკებში ჰქონდეს. package json
{
"main": "node_modules/expo/AppEntry.js",
"scripts": {
"start": "expo start",
"android": "expo start --android",
"ios": "expo start --ios",
"web": "expo start --web",
"eject": "expo eject",
"test": "jest --watchAll"
},
"jest": {
"preset": "jest-expo"
},
"dependencies": {
"@apollo/client": "^3.3.21",
"@eva-design/eva": "^2.0.0",
"@expo-google-fonts/dev": "^0.1.0",
"@expo-google-fonts/lato": "^0.1.0",
"@expo/vector-icons": "^12.0.0",
"@expo/webpack-config": "~0.12.63",
"@fingerprintjs/fingerprintjs": "^3.2.0",
"@react-native-async-storage/async-storage": "~1.15.0",
"@react-native-community/masked-view": "0.1.10",
"@react-native-community/netinfo": "6.0.0",
"@react-navigation/bottom-tabs": "^5.11.2",
"@react-navigation/native": "^5.9.4",
"@react-navigation/stack": "^5.12.8",
"@types/javascript-time-ago": "^2.0.2",
"@types/jwt-decode": "^3.1.0",
"@types/lodash": "^4.14.171",
"@types/luxon": "^1.27.1",
"@types/uuid": "^8.3.1",
"@ui-kitten/components": "^5.1.0",
"@ui-kitten/eva-icons": "^5.1.0",
"class-validator": "^0.13.1",
"dotenv": "^8.2.0",
"expo": "^42.0.0",
"expo-app-loading": "^1.1.2",
"expo-auth-session": "~3.3.1",
"expo-battery": "~5.0.0",
"expo-constants": "~11.0.1",
"expo-device": "~3.3.0",
"expo-font": "~9.2.1",
"expo-intent-launcher": "~9.1.0",
"expo-linking": "~2.3.1",
"expo-localization": "~10.2.0",
"expo-location": "~12.1.2",
"expo-notifications": "~0.12.2",
"expo-permissions": "~12.1.1",
"expo-random": "~11.2.0",
"expo-secure-store": "~10.2.0",
"expo-splash-screen": "~0.11.2",
"expo-task-manager": "~9.2.2",
"expo-updates": "~0.8.0",
"expo-web-browser": "~9.2.0",
"fingerprintjs2": "^2.1.4",
"graphql": "^15.5.1",
"i18next": "^19.8.4",
"javascript-time-ago": "^2.3.7",
"jwt-decode": "^3.1.2",
"lodash": "^4.17.21",
"luxon": "^1.25.0",
"react": "16.13.1",
"react-dom": "16.13.1",
"react-i18next": "^11.11.1",
"react-native": "https://github.com/expo/react-native/archive/sdk-42.0.0.tar.gz",
"react-native-advertising-id": "^1.0.11",
"react-native-appearance": "~0.3.3",
"react-native-calendars": "^1.1264.0",
"react-native-elements": "^3.4.2",
"react-native-flags": "^1.0.0",
"react-native-gesture-handler": "~1.10.2",
"react-native-get-random-values": "~1.7.0",
"react-native-paper": "^4.9.2",
"react-native-reanimated": "~2.2.0",
"react-native-safe-area-context": "3.2.0",
"react-native-screens": "~3.4.0",
"react-native-svg": "12.1.1",
"react-native-vector-icons": "^7.1.0",
"react-native-web": "~0.13.12",
"react-refresh": "^0.8.3",
"uuid": "^8.3.2"
},
"devDependencies": {
"@expo/ngrok": "^2.5.0",
"@types/react": "~16.9.35",
"@types/react-native": "~0.63.2",
"file-loader": "^6.2.0",
"react-devtools": "^4.13.5",
"typescript": "~4.0.0"
},
"private": true
}