2017-01-22 37 views
7

etkinleştirmek için sormak benim uygulama başladığında bir cihazda ağ veya GPS etkin olup olmadığını kontrol etmek için arıyorum. Ve devre dışı bırakılırsa, kullanıcının bunu etkinleştirmesini ister.tepki-yerli kontrol ve kullanıcı ağ/GPS

Bu özellik React-native? Içinde görünür ve bu tür iletişim kutularında yardımcı olabilecek herhangi bir sınıf veya araç var mı?

cevap

6

Kendi sorumu yanıtlamaya başlayacağım. GPS için

:

mantıklı bir çözüm gibi görünüyor. IOS, coğrafi konum isteğinin olup olmadığını yerel olarak talep ediyor gibi görünüyor. Ağı için

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) 
      }) 

: hiçbir yerli destek var ve Android için yani benim eylem yaratıcısı içinde bir sonraki kod eklendi bu doğal desteklenmiyor ama birileri o (https://github.com/webyonet/react-native-android-location-services-dialog-box)

için bir modül yarattı Ne de olsa ben kontrol etmek için kendi eylem yaratıcımı yapıyorum.

Biraz daha
export function networkCheck(){ 
    return (dispatch) => { 
    const dispatchNetworkState = (isConnected) => dispatch({ 
     type: types.NETWORK_STATE, 
     state: isConnected 
    }) 
    const handle =() => NetInfo.isConnected.fetch().done(dispatchNetworkState) 
    NetInfo.isConnected.addEventListener('change', handle); 
    } 
} 

:

GPS i görevin ortasında GPS'i kullanıcı giderse kontrol etmek ve devre dışı bırakmak için bu ekledi.

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) 
    } 
} 
+1

"IOS, coğrafi konum isteğinin olup olmadığını yerel olarak talep ediyor" - yalnızca ilk istekte olduğu anlaşılıyor. Daha sonraki taleplerde sadece koddan başarısız olurlar ve herhangi bir iletişim istemi göstermezler. IOS SE ile bir iPhone SE'de test edildi ve "Yer hizmetleri devre dışı bırakıldı" mesajı aldım. – Vee6

1

iOS'un (> = iOS8?) Ve Android'in son sürümlerinde uygulama izinleri iletişim kutusunu gösterebilir ve kullanıcıların kamera ve konum gibi izinleri açıp kapatabilirler. Bunu yapmak için yerel bir modül var: https://github.com/yonahforst/react-native-permissions

+3

Yanıt için Haitao'ya teşekkürler. Ama bu aradığım şey değil. Bu, izinlerle ilgili bir soru değil, yürütme sürelerinde etkinleştirilmiş veya etkin olmayan donanım özellikleriyle ilgili bir sorudur (izinler zaten var). – Kanekotic

İlgili konular