React Native 版本 .apk 在更高版本的 android 设备中崩溃,地理定位权限被拒绝错误
Posted
技术标签:
【中文标题】React Native 版本 .apk 在更高版本的 android 设备中崩溃,地理定位权限被拒绝错误【英文标题】:Reack Native release .apk crashes in higher version of android devices with geolocation permission denied error 【发布时间】:2019-03-08 02:44:39 【问题描述】:我创建了一个简单的应用程序,它有一个登录页面,当用户点击登录按钮时,它会导航到另一个页面。每当我使用 react-native run-android 运行我的应用程序时,它都可以正常工作。但是,每当我在更高版本的 Android 设备中运行 .apk 文件时,应用程序就会崩溃(它在 android 5 和 6 中运行良好)。
package.json
"name": "awsUpload",
"version": "0.0.1",
"private": true,
"scripts":
"start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest"
,
"dependencies":
"aws-sdk": "^2.395.0",
"link": "^0.1.5",
"react": "16.6.3",
"react-native": "^0.58.3",
"react-native-aws3": "0.0.8",
"react-native-device-info": "^0.26.2",
"react-native-file-upload": "^1.0.4",
"react-native-image-picker": "^0.28.0",
"react-native-material-dropdown": "^0.11.1",
"react-native-router-flux": "^4.0.6",
"uniqid": "^5.0.3"
,
"devDependencies":
"babel-core": "7.0.0-bridge.0",
"babel-jest": "24.0.0",
"jest": "24.0.0",
"metro-react-native-babel-preset": "0.51.1",
"react-test-renderer": "16.6.3"
,
"jest":
"preset": "react-native"
我正在使用下面的代码来获取地理位置。据我所知,由于受到保护,在更高版本的 Android 设备中获取地理位置已经存在问题,并且存在堆栈溢出的解决方案。但是我不知道如何使用它。
我的代码是,
import React, Component from 'react';
import Text, View from 'react-native';
export default class App extends Component<Props>
constructor(props)
super(props);
this.state =
currentLongitude: 'unknown',//Initial Longitude
currentLatitude: 'unknown',//Initial Latitude
componentDidMount = () =>
navigator.geolocation.getCurrentPosition(
//Will give you the current location
(position) =>
const currentLongitude = JSON.stringify(position.coords.longitude);
//getting the Longitude from the location json
const currentLatitude = JSON.stringify(position.coords.latitude);
//getting the Latitude from the location json
this.setState( currentLongitude:currentLongitude );
//Setting state Longitude to re re-render the Longitude Text
this.setState( currentLatitude:currentLatitude );
//Setting state Latitude to re re-render the Longitude Text
,
(error) => alert(error.message),
enableHighAccuracy: true, timeout: 20000, maximumAge: 1000
);
this.watchID = navigator.geolocation.watchPosition((position) =>
//Will give you the location on location change
console.log(position);
const currentLongitude = JSON.stringify(position.coords.longitude);
//getting the Longitude from the location json
const currentLatitude = JSON.stringify(position.coords.latitude);
//getting the Latitude from the location json
this.setState( currentLongitude:currentLongitude );
//Setting state Longitude to re re-render the Longitude Text
this.setState( currentLatitude:currentLatitude );
//Setting state Latitude to re re-render the Longitude Text
);
componentWillUnmount = () =>
navigator.geolocation.clearWatch(this.watchID);
render()
return (
<View>
<Text>Longitude: this.state.currentLongitude</Text>
<Text>Latitude: this.state.currentLatitude</Text>
this.state.error ? <Text>Error: this.state.error</Text> : null
</View>
);
解决方案链接是,
https://***.com/questions/33865445/gps-location-provider-requires-access-fine-location-permission-for-android-6-0/33866959
【问题讨论】:
尝试在更高版本的模拟器中运行,看看log cat logs 【参考方案1】:错误完全清楚,您需要获得访问位置的权限。
有两种类型的权限:
1- 仅通过向manifest.xml
添加权限即可授予的权限
2- 用户本人必须接受该权限。(这些通常显示在 dialog
中,并要求用户授予应用访问权限...)。
位置权限是第二种。所以将该权限添加到Manifest.xml
不会做任何事情。
您可以查看https://facebook.github.io/react-native/docs/permissionsandroid中的权限列表
下面的链接解释了请求用户许可的方式:
How do I request permission for Android Device Location in React Native at run-time?
【讨论】:
我发现,我的 .apk 崩溃了,因为我正在获取用户位置。如何解决? 您提供的信息还不够!请给一些代码或堆栈跟踪 你是用android studio调试的吗? 我需要添加该权限 MainActivity.java 文件。我对如何添加它感到困惑。 我编辑了我的答案。如果您正在使用 react-native 进行编码,则无需在MainActivity.java
中编写代码,希望对您有所帮助以上是关于React Native 版本 .apk 在更高版本的 android 设备中崩溃,地理定位权限被拒绝错误的主要内容,如果未能解决你的问题,请参考以下文章
React Native Maps - 自定义标记图像未在更高的 Android 版本中呈现
是否可以在 react native 中获取 apk 包名称和版本代码?
navigator.geolocation.getCurrentPosition 在 React Native 版本(0.60)及更高版本中不起作用,如何获取位置?