Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native 响应本机检查并提示用户启用网络/GPS_React Native - Fatal编程技术网

React native 响应本机检查并提示用户启用网络/GPS

React native 响应本机检查并提示用户启用网络/GPS,react-native,React Native,我正在研究如何在应用程序启动时检查设备上是否启用了网络或GPS。如果它们被禁用,则提示用户启用它 这在React native中是否可行?是否有任何类或工具可以帮助处理此类对话框?在最新版本的iOS(>=iOS8?)和Android中,您可以显示应用程序权限对话框,并允许用户打开/关闭权限,如照相机和位置。有一个本机模块可以做到这一点:所以我将开始回答我自己的问题 对于GPS: 似乎有一个合理的解决办法。如果存在地理位置请求,IOS似乎会以本机方式请求。对于Android来说,这不是本机支持的,

我正在研究如何在应用程序启动时检查设备上是否启用了网络或GPS。如果它们被禁用,则提示用户启用它


这在React native中是否可行?是否有任何类或工具可以帮助处理此类对话框?

在最新版本的iOS(>=iOS8?)和Android中,您可以显示应用程序权限对话框,并允许用户打开/关闭权限,如照相机和位置。有一个本机模块可以做到这一点:

所以我将开始回答我自己的问题

对于GPS:


似乎有一个合理的解决办法。如果存在地理位置请求,IOS似乎会以本机方式请求。对于Android来说,这不是本机支持的,但有人为此创建了一个模块()

因此,在我的action creator中,我添加了下一个代码:

if(Platform.OS === 'android')
LocationServicesDialogBox.checkLocationServicesIsEnabled({ 
                message: "<h2>Use Location?</h2> \
                            This app wants to change your device settings:<br/><br/>\
                            Use GPS for location<br/><br/>", 
                ok: "YES", 
                cancel: "NO" 
            }).then(() => { 
                locationTracking(dispatch, getState, geolocationSettings)
            })
多一点:

对于GPS,我添加此选项是为了检查用户是否在任务进行到一半时去禁用GPS

export function locationCheck(geolocationSettings = {enableHighAccuracy: true, timeout: 20000, maximumAge: 10000, distanceFilter:10}){
  return (dispatch) => {
    navigator.geolocation.watchPosition(
        () => {
            dispatch({
                type: types.LOCATION_STATE,
                state: true
            })
        },
        () => {
            dispatch({
                type: types.LOCATION_STATE,
                state: false
            })
        },
        geolocationSettings)
  }
}

要在Android上启用定位/gps,我可以推荐此模块:

它使用标准安卓对话框定位:

谢谢海涛的回答。但这不是我想要的。这不是关于权限的问题,而是在执行时启用或未启用硬件功能的问题(权限已经存在)。“如果存在地理位置请求,IOS似乎会进行本机请求”-这似乎只发生在第一次请求时。在以后的请求中,它们只是在代码中失败,并且不显示任何对话提示。在iOS 8的iPhone SE上测试,错误消息为“位置服务已禁用”。如何提示用户启用网络连接?这只会检查状态,对吗?@HenningHall如果你通过Kanekoti'c[npm package](),那么它会带你到android设置中的位置部分。有没有一种方法可以不带任何额外模块地显示这个框?有没有一种方法可以不带任何额外模块地显示这个框?这是否适用于android 10,因为它没有很多设备。有人有任何解决方法吗???它会抛出一个错误,说明null不是react native 0中的对象。62@amitpandya请检查此项目中的问题:如果Google Play服务没有像新分发的华为设备那样安装,您将面临此lib的问题。
export function locationCheck(geolocationSettings = {enableHighAccuracy: true, timeout: 20000, maximumAge: 10000, distanceFilter:10}){
  return (dispatch) => {
    navigator.geolocation.watchPosition(
        () => {
            dispatch({
                type: types.LOCATION_STATE,
                state: true
            })
        },
        () => {
            dispatch({
                type: types.LOCATION_STATE,
                state: false
            })
        },
        geolocationSettings)
  }
}