React native 应对本机/世博会地点权限问题
我对使用Expo构建的React本机Android应用程序的权限有一个问题。当我发布用于测试Play Store的Alpha构建时,应用程序不会提示用户向应用程序授予位置权限。目前我正在尝试获得如下许可: 世博会版本:React native 应对本机/世博会地点权限问题,react-native,expo,React Native,Expo,我对使用Expo构建的React本机Android应用程序的权限有一个问题。当我发布用于测试Play Store的Alpha构建时,应用程序不会提示用户向应用程序授予位置权限。目前我正在尝试获得如下许可: 世博会版本:“世博会”:“^31.0.2”, 在app.json中声明我的权限: "permissions": [ "ACCESS_COARSE_LOCATION", ] LandingPage.js async componentDidMount() { a
“世博会”:“^31.0.2”,
在app.json
中声明我的权限:
"permissions": [
"ACCESS_COARSE_LOCATION",
]
LandingPage.js
async componentDidMount() {
await this.requestPermission();
}
async requestPermission() {
try {
const granted = await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.PERMISSIONS.ACCESS_COARSE_LOCATION)
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
this.watchId = navigator.geolocation.watchPosition(
position => {
const { latitude, longitude } = position.coords;
this.setState({
latitude,
longitude,
error: null,
loading: false,
});
},
error => this.setState({ error: error.message }),
{ enableHighAccuracy: true, timeout: 20000, maximumAge: 20000, distanceFilter: 10 },
);
} else {
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION,
{
title: 'Location Access',
message:
'We need to access your location so we ' +
'can give you directions to your selecte venue.',
buttonNeutral: 'Ask Me Later',
buttonNegative: 'Cancel',
buttonPositive: 'OK',
},
);
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
alert('Location permission granted!');
this.watchId = navigator.geolocation.watchPosition(
position => {
const { latitude, longitude } = position.coords;
this.setState({
latitude,
longitude,
loading: false,
});
},
error => this.setState({ error: error.message }),
{ enableHighAccuracy: true, timeout: 20000, maximumAge: 20000, distanceFilter: 10 },
);
} else {
alert('Location permission denied');
}
}
} catch (err) {
console.warn(err)
}
}
render() {
const { loading } = this.state;
if (loading) {
return (
<LoadingScreen />
)
} else {
return (
<MainPage />
)
}
}
异步组件didmount(){
等待此消息。requestPermission();
}
异步请求权限(){
试一试{
const grated=wait PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.PERMISSIONS.ACCESS\u位置)
如果(已授予===权限sandroid.RESULTS.已授予){
this.watchId=navigator.geolocation.watchPosition(
位置=>{
常数{纬度,经度}=position.coords;
这是我的国家({
纬度,
经度,
错误:null,
加载:false,
});
},
error=>this.setState({error:error.message}),
{enableHighAccurance:true,超时:20000,最大值:20000,距离筛选器:10},
);
}否则{
授予的常数=等待许可和ROID.request(
权限和roid.PERMISSIONS.ACCESS\u位置,
{
标题:“位置访问”,
信息:
'我们需要访问您的位置,以便+
“可以为您指明所选地点的方向。”,
buttonNeutral:'稍后再问我',
按钮否定:“取消”,
buttonPositive:“OK”,
},
);
如果(已授予===权限sandroid.RESULTS.已授予){
警报('已授予位置权限!');
this.watchId=navigator.geolocation.watchPosition(
位置=>{
常数{纬度,经度}=position.coords;
这是我的国家({
纬度,
经度,
加载:false,
});
},
error=>this.setState({error:error.message}),
{enableHighAccurance:true,超时:20000,最大值:20000,距离筛选器:10},
);
}否则{
警报(“位置权限被拒绝”);
}
}
}捕捉(错误){
控制台。警告(错误)
}
}
render(){
const{loading}=this.state;
如果(装载){
返回(
)
}否则{
返回(
)
}
}
我没有收到任何警报-我收到的只是我的
组件旋转
我尝试过像这样使用Expo权限模块wait Expo.permissions.getAsync(Expo.permissions.LOCATION)代码>但再次-相同的结果
我是否遗漏了将应用程序发布到使用Expo构建的Play Store的相关内容,或者我试图请求权限时出错了?我不确定授予的权限和roid.RESULTS。这就是我请求位置许可的方式,它是有效的
let { status } = await Permissions.askAsync(Permissions.LOCATION);
if(status === 'granted') {
this.getLocation();
}
是否总是提示用户输入此权限?@RobGleeson没有用户只提示一次。当代码下次运行时,它会自动返回“已授予”。