Flutter-geolocator: 믞래는 IOS13에서 핎결되지 않습니닀.

에 만든 2020년 04월 29음  Â·  63윔멘튞  Â·  출처: Baseflow/flutter-geolocator

🐛 버귞 신고

getCurrentLocation을 시도하멎 핎결되지 않습니닀. 나는 IOS에 대한 전묞가가 아니므로 묎얞가륌 잊얎 버늰 겜우 저에게 섀명하십시였.

Future<Position> getCurrentPosition({
    LocationAccuracy accuracy = LocationAccuracy.best,
    GeolocationPermission geolocationPermission =
        GeolocationPermission.location,
  }) =>
      _geolocator.getCurrentPosition(
        desiredAccuracy: accuracy,
        locationPermissionLevel: geolocationPermission,
      );

팟파음:

config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
        '$(inherited)',

        ## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
         'PERMISSION_LOCATION=1',
      ]

정볎.plist:

    <key>NSLocationWhenInUseUsageDescription</key>
    <string>Need location when in use</string>
    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
    <string>Always and when in use!</string>
    <key>NSLocationUsageDescription</key>
    <string>Older devices need location.</string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string>Can I haz location always?</string>

펞집하닀:

싀제 Android ꞰꞰ에서 테슀튞했는데 묞제도 발생하고 있습니닀.

낮 맀니페슀튞 위치 권한:

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

예상되는 행동

포지션을 반환합니닀.

번식 닚계

geolocator.GetCurrentPosition을 혞출하Ʞ만 하멎 됩니닀.

버전: 5.1.5.

플랫폌:

  • [x] :iphone: iOS(IOS 시뮬레읎터로 테슀튞)
  • [x] :robot: Android(Android 10QkQ1.190828.002가 섀치된 Xiomi Pocophone F1에서 테슀튞됚)
android ios triage

가장 유용한 댓Ꞁ

안녕하섞요 여러분,

읎 몚든 묞제륌 제거핎알 하는 I(최종) 늎늬슀 버전 6.0.0-rc.1 을 발표하게 되얎 Ʞ쁩니닀.

사용핎 볎시고 플드백을 죌시멎 정말 감사하겠습니닀.

몚든 63 댓Ꞁ

같은 였류가 발생합니닀. 읎것은 iOS와 Android 몚두에서 발생합니닀 .....

iOS 10.3 또는 iOS 13.4 륌 싀행하는 시뮬레읎터 와 iOS 13.4 가 섀치된 iPad 에서도 동음한 였류가 발생합니닀.

mycode.dart:

Position pos = await Geolocator()
              .getCurrentPosition(
                  locationPermissionLevel:
                      GeolocationPermission.locationWhenInUse,
                  desiredAccuracy: LocationAccuracy.high)

정볎.plist:

<key>NSLocationAlwaysUsageDescription</key>
<string>Can I haz location always?</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Need location when in use</string>

버전: 5.3.1

Android 8.0에서도 동음한 묞제가 발생합니닀. 도달하멎 발생하는 소슀 윔드에 직접 10쎈 타읎뚞륌 작성하는 것을 고렀합니닀.

@brenoasm 시뮬레읎터 또는 싀제 장치에서 읎 묞제가 발생하고 있습니까?

@dammel 시뮬레읎터에서 위치륌 방출하도록 시뮬레읎터륌 구성하는 것읎 쀑요합니닀. 읎것은 시뮬레읎터 애플늬쌀읎션의 닀음 메뉎 항목을 사용하여 수행할 수 있습니닀. Ʞ능 -> 위치 ->("없음" 읎왞의 옵션 선택).

@mvanbeusekom 싀제 êž°êž°ê°€ 위치륌 낎볎낎지 않는닀멎? 사용자가 GPS륌 끄멎 안 되겠죠?

@mvanbeusekom IOS용 시뮬레읎터에서 테슀튞했습니닀(싀제 장치에서 테슀튞할 iPhone읎 없습니닀). 싀제 Android ꞰꞰ에서 테슀튞했는데 같은 묞제가 발생했습니닀. Android êž°êž° 정볎륌 수정하고 추가하겠습니닀.

나는 싀제 안드로읎드 장치와 같은 묞제가 있습니닀 ...

@mvanbeusekom 도와죌셔서 감사합니닀. 시뮬레읎터에 대한 귀하의 Tipp가 저에게 횚곌적읎었습니닀.
나는 아묎 것도 변겜하지 않았지만 읎제 iPad(싀제 장치)에서 닀시 작동합니닀.

iOS 시뮬레읎터와 iOS ꞰꞰ에서 테슀튞한 결곌 묞제는 없었지만 Android 에뮬레읎터에서도 동음한 묞제가 발생했습니닀.

나는 나의 겜우륌 자섞히 섀명하렀고 녞력할 것읎닀.

첫짞, 묞제는 Android 및 iPhone 장치(QA 팀곌 핚께 앱을 테슀튞하Ʞ 위핎 Testflight륌 사용하고 있음)에서 발생하지만 Android Emulator 및 iOS 시뮬레읎터에서도 발생합니닀.

'getCurrentPosition' 메서드는 때때로 위치륌 반환하지 않지만 연속적읞 시도 후에는 위치륌 반환합니닀. 나는 음반적윌로 앱을 처음 섀치할 때읎 묞제가 있습니닀. 음정 시간읎 지나멎 갑자Ʞ 메서드가 현재 위치륌 가젞였Ʞ 시작합니닀.

읎 묞제의 묞제는 항상 발생하지 않는닀는 것입니닀. 앱을 섀치할 수 있윌며 때로는 첫 번짞 시도에서 현재 위치륌 반환하는 메서드륌...

추가 ì°žê³  사항:

  1. 메서드가 제대로 작동하Ʞ 시작하고 핫 늬로드 또는 핫 재시작을 수행하멎 메서드가 계속핎서 잘 작동합니닀.
  2. 메서드는 예왞륌 throw하지 않지만 '대Ʞ'륌 넣윌멎 묎Ʞ한 쀑지됩니닀.
  3. 읎전 버전의 Geolocator륌 사용하렀고 했지만 묞제가 지속됩니닀.
  4. 낮 프로젝튞에서 Google 지도륌 사용하고 있윌므로 "최신 버전의 지도와 충돌읎 있는 것은 아닐까...?"띌고 생각했습니닀. 아니요. 읎전 버전의 Google 지도로 컎파음했는데 묞제가 지속됩니닀.
  5. 흥믞로욎 점은 몇 죌 전에는 읎 묞제가 발생하지 않았닀는 것입니닀...

낮 환겜:

$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.12.13+hotfix.9, on Linux, locale en_GB.UTF-8)

[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
[✓] Android Studio (version 3.6)
[✓] IntelliJ IDEA Community Edition (version 2019.3)
[✓] Connected device (2 available)

• No issues found!

낮 프로젝튞의 임시 솔룚션:

  1. 'getCurrentPosition' 메서드에 타임아웃을 추가했는데 'null'읎 반환되멎 타읎뚞륌 시작하고 몇 번읎고 닀시 시도합니닀... 잠시 후(가끔 몇 쎈, 때로는 1분) 메서드가 현재 위치륌 반환합니닀.
  2. 쎈Ʞ 위치가 필요한 겜우 'getLastKnownPosition()' 메서드륌 사용합니닀.

#375와 #386읎 읎 묞제와 ꎀ렚읎 있는 것 같습니닀.

LG G6, Android 9.0에서도 동음한 묞제가 발생합니닀.

절대 핎결하지 않습니닀.

작동하게 하는 읎상한 방법읎 있습니닀.
위치륌 확읞하Ʞ 위핎 Google 지도 앱을 시작합니닀. 읎륌 위핎 위치 섌서와 Wi-Fi륌 활성화핎알 합니닀(아마도 몚바음 데읎터 연결도 작동하지만 테슀튞되지는 않음).
귞래서 구Ꞁ 지도에서 위치륌 알아냈습니닀.
ê·ž 후에 낮 앱에서도 작동합니닀(나쀑에 낮 앱읎 시작되었거나 읎믞 싀행 쀑읞지 여부에 ꎀ계없읎).
Wi-Fi륌 종료하거나 위치륌 끄멎 닀시 쌜도 더 읎상 작동하지 않습니닀.

낮 앱읎 엎늬Ʞ 전에도 얞제든지 Google 지도륌 닫아도 상ꎀ 없습니닀(하지만 때로는 Google 지도륌 두 번 읎상 ì—Žì–Žì•Œ 합니닀.)
Google 지도는 지도가 닫힌 후에도 지속되고 지늬 위치 추적Ʞ에 필요한 묎얞가륌 섀정하는 것 같습니닀.

수정/수정:
훚씬 더 복잡합니닀. Google 지도륌 사용한 절찚는 "desiredAccuracy"에 대한 몚든 읞수와 핚께 작동했지만 Wi-Fi륌 전환할 때 두 가지 범죌가 있었습니닀.

  • LocationAccuracy.best 및 LocationAccuracy.high는 여전히 작동했지만 느렀졌습니닀.
  • LocationAccuracy.medium, LocationAccuracy.lower 및 LocationAccuracy.lowest는 더 읎상 핎결되지 않았윌며 핎당 읞수륌 사용하멎 상태 표시쀄의 locationsymbol읎 표시되지 않습니닀.

재부팅 후 장치 위치가 더 읎상 확읞되지 않습니닀. 따띌서 Google 지도륌 사용하여 위치 가젞였Ʞ륌 반복핎알 하며 섀명대로 닀시 작동합니닀.

(앱을 새로 섀치한 후 권한 대화 상자가 닀륎게 표시되고 "닀시 묻지 않음" 확읞란읎 없지만, 대화 상자가 처음 표시될 때만 핎당 대화 상자가 표시되고 ê·ž 읎후에는 항상 확읞란읎 있는 동음한 대화 상자)

동음한 묞제, Android 10, OnePlus 7 Pro.

위에서 섀명한 Google 지도의 튞늭은 저에게 횚곌가 없었지만 얎떻게 든 시간읎 지나멎 특정 작업을 수행하지 않고도 위치가 핎결되Ʞ 시작했습니닀. 방ꞈ 람띌우저에서 읎전에 엎늰 페읎지륌 읜은 닀음 낮 앱윌로 닀시 전환하여 위치륌 알렀죌는 대화 상자륌 볎았습니닀. 대화 상자는 믞래가 핎결될 때 표시되도록 섀정되얎 있윌므로 ê²°êµ­ 핎결되었지만 시간읎 걞렞습니닀. . ê·ž 후 위치는 몚든 시도에서 잘 핎결되었습니닀.
위에서 얞꞉했듯읎 재부팅 후 위치가 더 읎상 확읞되지 않습니닀.

시뮬레읎터에서는 몚든 것읎 잘 작동합니닀.

@SchmadenSchmuki 의 메시지 읎후에 나는 낮 프로젝튞에서 몇 가지 테슀튞륌 했고 읎것읎 낮 결론입니닀. Geolocator 플러귞읞에 영향을 믞치는 Google 지도 플러귞읞에 묞제가 있습니닀. ê·žë“€ 사읎에는 비혞환성읎 있습니닀.

읎것은 처음 시작할 때 낮 앱의 흐늄입니닀.

  1. 슀플래시 화멎을 볎여쀍니닀
  2. 한펾, 앱은 API에 연결하여 사용자 데읎터륌 가젞옵니닀.
  3. Geolocator륌 사용하여 사용자의 현재 위치륌 찟습니닀.
  4. 앱읎 시작 화멎을 종료한 닀음 사용자가 있는 위치륌 볎여죌는 지도륌 표시합니닀.

읎 흐늄에서는 앱읎 싀팚합니닀. Geolocator의 'getCurrentPosition()' 메서드는 싀팚하고 값을 반환하지 않습니닀. ì°žê³ : 'isLocationServiceEnabled()' 및 'getLastKnownPosition()' 메서드는 제대로 작동합니닀.

하지만 흐늄을 닀음곌 같읎 변겜하멎

  1. 슀플래시 화멎
  2. API에 연결하여 사용자 데읎터 가젞였Ʞ
  3. 임의의 위치로 지도 렌더링
  4. Geolocator륌 사용하여 사용자의 현재 위치 ì°Ÿêž°
  5. 지도의 칎메띌륌 현재 위치로 읎동

횚곌가있닀!!!!!

귞래서 낮 결론은 ì–Žë–€ 식 윌로든 Google Maps 플러귞읞읎 닀륞 플러귞읞읎 지늬적 위치 서비슀륌 사용하는 것을 찚닚하는 "묎얞가"륌 점유한닀는 것입니닀. Google 지도가 렌더링되멎 핎당 "묎얞가"가 핎제되고 몚든 사람읎 묞제 없읎 작업할 수 있습니닀.

닀륞 사람읎 확읞할 수 있닀멎 Flutter 사용자에게 묞제륌 ì—Žì–Ž 읎륌 확읞할 수 있습니닀.

@KnucklesEQ ꎑ범위한 볎고에 감사드늜니닀. 읎 묞제의 디버깅을 시작하고 묞제륌 재현하고 핎결하는 데 더 많은 시간을 할애할 것입니닀. 여Ʞ 있는 닀륞 사람듀도 몚두 Google 지도 플러귞읞을 사용하고 있는지 확읞할 수 있닀멎 맀우 도움읎 될까요?

귞래도 여러 가지 묞제가 있닀고 생각합니닀(Android 9 + Android 10의 찚읎점, iOS는 Google 지도와 핚께 Geolocator륌 사용하여 위치륌 반환하는 데 몇 쎈가 소요됚). 몚든 묞제에 쎈점을 맞추고 가능한지 확읞하겠습니닀. 상황을 개선합니닀. 시간읎 좀 걞늬므로 최선을 닀하고 진행 상황에 대한 업데읎튞륌 여Ʞ에 낚Ʞ렀고 녞력하는 동안 ì–‘í•Ží•Ž 죌십시였.

지도 플러귞읞을 사용하지 않습니닀. 앱읎 싀행 쀑음 때만 권한을 부여하멎(locationWhenInUse), 닀음에 요청할 때 앱읎 표시되지 않고 핎결되지 않습니닀(Android만 핎당, IOS에서는 읎 묞제륌 연 읎후로 작동하지 않음).

Google 지도 플러귞읞을 사용하지 않습니닀.

Google 지도 플러귞읞도 사용하지 않습니닀.
(묞제가 있을 때 Google 지도 앱에도 위치륌 가젞였는 데 묞제가 있는지 확읞한 닀음 핎당 위치륌 가젞였는 것읎 낮 앱에 영향을 죌는 것윌로 나타났습니닀.)

자섞한 낎용은:
묞제는 닀음 조걎읎 찞음 때 발생합니닀.

  • 위치 ꎀ늬자륌 사용하고 있습니닀(Geolocator().forceAndroidLocationManager = true)
  • 저는 LocationAccuracy.best읞 Ʞ볞 위치 정확도륌 사용하고 있습니닀.
  • 나는 안에있닀

윔드륌 통핎 추적했는데 처음 2가지 조걎에서 선택되는 위치 공꞉자는 'gps'읎고 장치는 낎부의 GPS 신혞륌 선택할 수 없습니닀. 나는 발윔니로 나갔고 거의 슉시 몚든 것읎 정상적윌로 작동하Ʞ 시작했습니닀.

위치 정확도가 위치 공꞉자 선택에 ì–Žë–€ 영향을 믞치는지 알아볎Ʞ 위핎 위치 정확도륌 가지고 놀지 않았지만 공꞉자가 (하드윔딩을 통핎) '넀튞워크'하도록 강제로 시도했습니닀. 귞것은 작동하지만 검색된 위치의 정확도는 분명히 ~1080믞터로 귞닀지 좋지 않았습니닀.

@minusminuszero 가 맞습니닀. 저에게도 마찬가지입니닀.
따띌서 재부팅 직후에도 정상적윌로 작동하고 있습니닀. 불펞을 드렀 죄송합니닀.
(저는 위치 ꎀ늬자륌 섀정하지 않았윌므로 제 겜우에는 forceAndroidLocationManager = false입니닀. 저는 LocationAccuracy.best륌 사용하고 LocationAccuracy.high에서도 작동할 것읎띌고 추잡합니닀. 읎 겜우 locationsymbol읎 더 낮은 정확도에서는 작동하지 않을 것입니닀. 상태 표시쀄에 표시되지 않지만 읎믞 묞제가 있습니닀.)

재현하는 것곌 똑같은 닚계(낎부, Ʞ볞 위치 acc 등)륌 사용하여 위와 같은 현상을 겜험하고 있습니닀.

자섞한 낎용은:
묞제는 닀음 조걎읎 찞음 때 발생합니닀.

  • 위치 ꎀ늬자륌 사용하고 있습니닀(Geolocator().forceAndroidLocationManager = true)
  • 저는 LocationAccuracy.best읞 Ʞ볞 위치 정확도륌 사용하고 있습니닀.
  • 나는 안에있닀

윔드륌 통핎 추적했는데 처음 2가지 조걎에서 선택되는 위치 공꞉자는 'gps'읎고 장치는 낎부의 GPS 신혞륌 선택할 수 없습니닀. 나는 발윔니로 나갔고 거의 슉시 몚든 것읎 정상적윌로 작동하Ʞ 시작했습니닀.

위치 정확도가 위치 공꞉자 선택에 ì–Žë–€ 영향을 믞치는지 알아볎Ʞ 위핎 위치 정확도륌 가지고 놀지 않았지만 공꞉자가 (하드윔딩을 통핎) '넀튞워크'하도록 강제로 시도했습니닀. 귞것은 작동하지만 검색된 위치의 정확도는 분명히 ~1080믞터로 귞닀지 좋지 않았습니닀.

"넀튞워크" 위치륌 강제로 지정하는 방법은 묎엇입니까? 읎것은 적얎도 싀낎에서 발생하는 묞제륌 핎결하는 잡멎에서 충분할 것입니닀.

"넀튞워크" 위치륌 강제로 지정하는 방법은 묎엇입니까? 읎것은 적얎도 싀낎에서 발생하는 묞제륌 핎결하는 잡멎에서 충분할 것입니닀.

Geolocator 플러귞읞 윔드에서 직접 위치 제공자 값을 하드윔딩하여 귞렇게 했습니닀. 낮은 정확도륌 선택하멎 같은 횚곌가 있을 것읎띌고 생각하지만 시도하지 않았습니닀.

아마도 메서드에는 타임아웃 맀개변수가 있얎알 하지 않을까요?

Flutter/Geolocator 팀읎 읎 묞제륌 핎결하고 있습니까?

ë„€, 우늬는

@mvanbeusekom 감사합니닀!
묞제의 원읞읎 묎엇읞지 아십니까?
귞것을 우회하는 방법(또는 음종의 임시 솔룚션)을 찟았습니까?
(4.0.3윌로 닀욎귞레읎드핎도 묞제가 핎결되지 않았습니닀.)

시뮬레읎터에서 위치륌 방출하도록 시뮬레읎터륌 구성하는 것읎 쀑요합니닀. 읎것은 시뮬레읎터 애플늬쌀읎션의 닀음 메뉎 항목을 사용하여 수행할 수 있습니닀. Ʞ능 -> 위치 ->("없음" 읎왞의 옵션 선택).

귞것은 나륌 위핎 묞제륌 핎결했습니닀. 귞러나 예왞나 닀륞 것 없읎 싀팚하Ʞ 때묞에 맀우 혌란슀러욎 버귞입니닀.

시뮬레읎터에서 위치륌 방출하도록 시뮬레읎터륌 구성하는 것읎 쀑요합니닀. 읎것은 시뮬레읎터 애플늬쌀읎션의 닀음 메뉎 항목을 사용하여 수행할 수 있습니닀. Ʞ능 -> 위치 ->("없음" 읎왞의 옵션 선택).

귞것은 나륌 위핎 묞제륌 핎결했습니닀. 귞러나 예왞나 닀륞 것 없읎 싀팚하Ʞ 때묞에 맀우 혌란슀러욎 버귞입니닀.

귞래, 나도.
위치 요청에 시간 쎈곌륌 추가하고 위치가 섀정되지 않은 시뮬레읎터에서 예왞륌 발생시킀십시였.

감사 í•Žìš” :)

iOS에서도 동음한 묞제가 있윌며 Google 지도 플러귞읞도 사용하고 있습니닀.
getLocationStream을 사용하는 앱읎 있지만 Google 지도가 있는 탭윌로 읎동할 때까지 권한 대화 상자가 표시되지 않습니닀.
Google 지도륌 더 읎상 사용하지 않았지만 플러귞읞을 제거하는 것을 잊은 닀륞 앱읎 있는데 동음한 묞제가 발생했습니닀. Google 지도 플러귞읞을 제거했는데 읎제 제대로 작동합니닀.

읎에 대한 업데읎튞가 있습니까?

안녕하섞요 여러분, 저는 읎 묞제륌 핎결하Ʞ 위핎 엎심히 녞력하고 있습니닀. Ʞ볞적윌로 우늬는 geolocator륌 처음부터 구축하고 한 번에 여러 묞제륌 핎결하Ʞ로 결정했습니닀.

포핚될 포읞튞는 닀음곌 같습니닀.

  • 권한 묞제 수정
  • getCurrentLocation 가 합늬적읞 시간 낎에 검색되었는지 확읞하십시였.
  • getCurrentLocation 및 getPositionStream 메서드에 시간 쎈곌륌 추가하여 위치 획득읎 예상볎닀 였래 걞늬멎 요청읎 시간 쎈곌되고 요청을 닀시 시작할 수 있습니닀.
  • 잠재적읞 였류 메시지륌 개선합니닀.
  • 연합 플러귞읞 구조로 읎동하여 웹 지원을 쀀비합니닀.
  • Android v2 플러귞읞 업데읎튞

첫 번짞 닚계는 지였윔딩 Ʞ능을 제거하고 자첎 플러귞읞(현재 pub.dev 에서 사용할 수 있음)에서 혞슀팅하는 것읎었습니닀.

두 번짞 닚계는 필요한 몚든 Dart 윔드륌 생성하고 닚위 테슀튞하는 것읎었습니닀. 읎제 쀀비되었윌며 federated_plugin 분Ʞ에서 볌 수 있습니닀.

닀음 닚계는 iOS 및 Android 구현을 추가하고 예제 앱을 수정하는 것입니닀. 읎것읎 제가 지ꞈ 하고 있는 음입니닀. 바띌걎대 앞윌로 2죌 안에 몚든 작업을 마칠 수 있을 것입니닀.

얎욌든 읞낎심곌 플드백을 죌신 몚든 분듀께 감사드늬고 싶습니닀. 조ꞈ만 더 Ʞ닀렀 죌섞요.

@mvanbeusekom
좋은 소식입니닀. 시간을 ë‚Žì–Ž 읎 플러귞읞을 제공핎죌셔서 Ʞ쁩니닀.

큰 감사륌 드늜니닀!

닀음 업데읎튞륌 Ʞ대합니닀.

감사합니닀.

멋진! 테슀튞할 수 있도록 출시되멎 알렀죌섞요.

임시 í•Žê²° 방법윌로 GeolocationStatus checkGeolocationPermissionStatus() 메서드륌 사용하여 장치의 상태륌 확읞할 수 있습니닀. 위치가 꺌젞 있윌멎 읎 메서드는 "비활성화됚"을 반환합니닀. 귞러멎 getCurrentPosition() 메서드륌 혞출할 필요가 없습니닀.

예시:

  Future<Position> getCurrentPosition() async {
    Position position;
    GeolocationStatus status = await _geolocator.checkGeolocationPermissionStatus(); 

    if (status != GeolocationStatus.disabled) {
      position = await _geolocator.getLastKnownPosition();

      if (position == null && status == GeolocationStatus.granted) {
        position = await _geolocator.getCurrentPosition(
          desiredAccuracy: LocationAccuracy.high,
          locationPermissionLevel: GeolocationPermission.locationWhenInUse,
        );
      }
    }

    return position;
  }

여Ʞ에 앜간의 업데읎튞, 였늘 아칚 Flutter 예제 앱을 포핚하여 iOS에 대한 완전한 지원을 포핚하는 federated_plugin 분Ʞ에 대한 새로욎 업데읎튞륌 푞시했습니닀.

우늬는 또한 권한 상태 확읞을 지원하는 Android 작업을 시작했윌며 읎제 권한 요청 및 위치 서비슀 처늬륌 구현할 것입니닀.

윔드륌 확읞하거나 통합을 시도하는 것은 테슀튞 앱에 있고 iOS에서 싀행됩니닀. 묞서화될 상당히 많은 죌요 변겜 사항읎 포핚되얎 있습니닀. 지ꞈ은 시간읎 걞늬Ʞ는 하지만 진행 상황읎 있닀는 것을 몚두에게 알늬고 싶었습니닀. 닀시 한 번 ì–‘í•Ží•Ž 죌셔서 감사합니닀.

여Ʞ에 앜간의 업데읎튞, 였늘 아칚 Flutter 예제 앱을 포핚하여 iOS에 대한 완전한 지원을 포핚하는 federated_plugin 분Ʞ에 대한 새로욎 업데읎튞륌 푞시했습니닀.

우늬는 또한 권한 상태 확읞을 지원하는 Android 작업을 시작했윌며 읎제 권한 요청 및 위치 서비슀 처늬륌 구현할 것입니닀.

윔드륌 확읞하거나 통합을 시도하는 것은 테슀튞 앱에 있고 iOS에서 싀행됩니닀. 묞서화될 상당히 많은 죌요 변겜 사항읎 포핚되얎 있습니닀. 지ꞈ은 시간읎 걞늬Ʞ는 하지만 진행 상황읎 있닀는 것을 몚두에게 알늬고 싶었습니닀. 닀시 한 번 ì–‘í•Ží•Ž 죌셔서 감사합니닀.

엎심히 음핎죌셔서 감사합니닀. 읎 변겜윌로 pub.dev의 geolocator 팚킀지륌 업데읎튞하시겠습니까?

또한 읎것은 위에서 얞꞉한 예에 대한 파음입니닀: position_updates_example_widget.dart?

엎심히 음핎죌셔서 감사합니닀. 읎 변겜윌로 pub.dev의 geolocator 팚킀지륌 업데읎튞하시겠습니까?

또한 읎것은 위에서 얞꞉한 예에 대한 파음입니닀: position_updates_example_widget.dart?

아니요, 저는 아직 pub.dev에 게시하지 않을 것입니닀. 읎것은 geolocator 플러귞읞의 전첎 재작업읎며 아직 Android륌 지원하지 않습니닀. Android와 묞서가 완료되멎 pub.dev에 늎늬슀할 것입니닀.

예, 읎 위젯은 예제 앱의 음부읎며 위치 업데읎튞륌 수신하는 방법을 볎여쀍니닀.

안녕,

읎 팚킀지륌 죌셔서 감사합니닀.

읎번 죌에 Android에 대핮 위에서 얞꞉한 몚든 작업을 완료할 수 있는 Ʞ회가 있습니까?

읎에 대한 업데읎튞가 있습니까?

처음윌로 요청할 때만 위치 지연을 Ʞ닀늜니닀.

재작업된 버전읎 ì–žì œ 출시되는지에 대한 업데읎튞가 있습니까? @mvanbeusekom

@dalmia007 , 아직 날짜는 없지만 진행 쀑입니닀. feature/federated_android 분Ʞ에 Android에 대한 Ʞ볞 지원을 추가했습니닀. 여Ʞ에는 권한 요청, 마지막윌로 알렀진 위치 가젞였Ʞ, 통합 위치 제공자 큎띌읎얞튞(Google Play 서비슀의 음부)륌 사용하여 현재 위치 및 위치 업데읎튞 가젞였Ʞ가 몚두 포핚됩니닀.

저는 여전히 닀음 작업을 하고 있습니닀.

안드로읎드 전용:

  • Google Play 서비슀륌 사용할 수 없는 겜우 위 Ʞ능에 대한 구현
  • 위치 서비슀가 활성화되지 않은 겜우 묞제륌 자동윌로 핎결합니닀.

음반적읞:

  • 묞서 업데읎튞

여Ʞ 에서 확읞하섞요.

@mvanbeusekom 업데읎튞 정말 감사합니닀! 👍

안녕하섞요 여러분,

읎 몚든 묞제륌 제거핎알 하는 I(최종) 늎늬슀 버전 6.0.0-rc.1 을 발표하게 되얎 Ʞ쁩니닀.

사용핎 볎시고 플드백을 죌시멎 정말 감사하겠습니닀.

읎 말을 í•Žì„œ 유감읎지만 읎믞 4.0.3윌로 되돌멮 수 있을 만큌 두 번읎나 충돌했습니닀.

E/AndroidRuntime(19881): java.lang.RuntimeException: Failure delivering result ResultInfo{who=<strong i="6">@android</strong>:requestPermissions:, request=24, result=-1, data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has extras) }} to activity {com.packagename.consumer.app/com.packagename.consumer.app.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'void com.baseflow.geolocator.permission.PermissionResultCallback.onResult(com.baseflow.geolocator.permission.LocationPermission)' on a null object reference

대화 상자에서 허용 허용을 누륎고 거부륌 눌렀을 때도 발생했습니닀. ë‚Žê°€ 놓친 것읎 있윌멎 알렀죌십시였.

@Dohmanlechx 는 6.0.0-rc.x 또는 5.3.2 버전에서 읎것을 얻었는지 확읞했습니닀.

6.0.0-rc.1 에서 읎것을 얻었습니닀(IDE에서 5.3.2+2 , ì°žê³ ë¡œ "업데읎튞"하도록 요청했습니닀)

@Dohmanlechx 플드백 덕분에 묞제륌 찟았습니닀. 분명히 귀하의 겜우 geolocator는 분명히 싀팚하는 처늬륌 시도하는 닀륞 플러귞읞윌로부터 플드백을 받고 있습니닀. 읎러한 겜우 Geolocator는 핎당 메시지가 Geolocator에 속하지 ì•Šêž° 때묞에 핎당 메시지륌 묎시핎알 합니닀. 였늘 읎 묞제륌 수정하고 새로욎 늎늬슀 후볎륌 발표하겠습니닀.

플드백 죌셔서 감사합니닀!

였, 싀제로 우늬는 permission_handler 륌 사용하고 있습니닀. 좋은 발견!

몚든 크레딧은 @Dohmanlechx 에게 돌아갑니닀. ;). 귀하의 플드백 덕분에 읎 버귞륌 발견할 수 있었고 곧 새 버전을 출시할 수 있을 것입니닀.

@Dohmanlechx 겜험한 버귞륌 수정핎알 하는 버전 6.0.0-rc.3을 방ꞈ 출시했습니닀.

맀우 훌륭하고 Android Emulator에서 신쀑하게 테슀튞되었윌며 승읞 및 거부, 위치 조작읎 완벜하게 작동했습니닀. 싀제 Android ꞰꞰ에서도 잘 작동했습니닀.

귞러나 iOS 시뮬레읎터에 대한 시슀템 요청읎 전혀 표시되지 않습니닀. 의도한 것 같습니까? 귞러나 적얎도 충돌하지 않윌며 사용 가능한 위치 없읎 앱읎 원하는 대로 작동합니닀. 불행히도 Xcode 연결 묞제로 읞핎 여전히 낮 iPhone에서 테슀튞할 수 없윌며 지ꞈ 테슀튞하Ʞ 위핎 TestFlight에 빌드륌 배포하고 싶지 않습니닀. iPhone에서 테슀튞하는 대로 알렀드늬겠습니닀.

하지만 지ꞈ까지는 너묎 좋습니닀!

ꎑ범위한 테슀튞 @Dohmanlechx 에 대핮 대당히 감사합니닀. 대당히 감사합니닀!

플러귞읞은 싀제로 iOS에서 서비슀 요청을 표시하지 않습니닀. 귞렇게 하는 (공개) API가 없Ʞ 때묞입니닀. 여Ʞ에 있는 유음한 옵션은 수동윌로 섀정을 업데읎튞하는 방법을 섀명하는 메시지륌 사용자에게 수동윌로 표시하는 것입니닀. 사용자륌 섀정 앱윌로 늬디렉션하는 옵션읎 있습니닀( openAppSettings() 또는 openLocationSettings() 메서드 혞출). README.md 파음에 더 자섞히 묞서화했습니닀.

읎 사싀을 알늬게 되얎 유감읎지만 낮 iPhone XS Max, OS 13.6.1에서는 재앙처럌 작동했습니닀.

처음 위치륌 가젞였는 것은 읎전 버전처럌 작동했고 올바륞 위치륌 반환했지만 여전히 7-8쎈가 걞렞습니닀.

귞러나 두 번짞부터는 계속핎서 순식간에 던졌습니닀. 닀음곌 같은 읎유로 Exception err 에서 dynamic err 로 변겜핎알 했습니닀.
_ 처늬되지 않은 예왞: '_TypeError' 유형은 '예왞' 유형의 하위 유형읎 아닙니닀 . _.

싀팚할 때 가젞옵니닀(처음 가젞였Ʞ 후).

2020-08-26 14:01:45.670206+0200 Runner[4565:206487] flutter: 위치륌 가젞올 수 없음: 잘못된 상태: 요소 없음
2020-08-26 14:01:45.670416+0200 Runner[4565:206487] flutter: 위치륌 가젞올 수 없음: 'NoLocationFoundException' 읞슀턎슀

( NoLocationFoundException 는 낮 사용자 정의 큎래슀입니닀)

_Bad state: No element_ 는 불행히도 많은 것을 말하지 않습니닀... 아래는 낮 윔드입니닀:

static Future<void> _getUserLocation({bool isSneaky = false}) async {

  void _throw(dynamic err) {
    print("Could not fetch location: $err");
    if (!isSneaky) Fluttertoast.showToast(msg: getTranslation("location_fetch_error"));
    throw NoLocationFoundException();
  }

  await GeolocatorPlatform.instance
      .getCurrentPosition(
        desiredAccuracy: LocationAccuracy.high,
        timeLimit: const Duration(seconds: _TIMEOUT_DELAY),
      )
      .then((position) => _userLatestPosition = position)
      .catchError(
    (err) {
      // Debug only, remove later
      Fluttertoast.showToast(msg: "error: $err");

      if (err is TimeoutException) {
        GeolocatorPlatform.instance.getLastKnownPosition().then((position) {
          if (position == null) _throw(err);
          return position;
        }, onError: (err) {
          _throw(err);
        });
      } else if (err is PermissionDeniedException) {
        XxlPermissionsHandler.request(Permission.location);
      } else {
        _throw(err);
      }
    },
  ).catchError((err) => _throw(err));
}

iPhone에서 읎것을 재현할 수 있Ʞ륌 진심윌로 바랍니닀.

@Dohmanlechx , ꎑ범위한 플드백에 감사드늜니닀. 여Ʞ서 묞제륌 찟은 것 같습니닀. 읎제 귞것을 ê³ ì¹  수 있는 좋은 방법을 ì°Ÿì•„ì•Œ 합니닀 ;)

간닚히 말핎서 getCurrentPosition 메서드는 getPositionStream 륌 혞출하고 첫 번짞 요소륌 가젞옚 닀음 슀튞늌을 닫습니닀. 묞제는 getPositionStream 에 닀음곌 같은 윔드가 있닀는 것입니닀.

    if (_positionStream != null) {
      return _positionStream;
    }

읎믞 닫힌 슀튞늌에서 first 륌 혞출하Ʞ 때묞에 getCurrentPosition 륌 두 번짞로 혞출할 때 Bad state: No element 예왞가 발생한닀고 추잡할 수 있습니닀. 나는 읎것을 작업하고 곧 새로욎 후볎자륌 발표할 것입니닀.

@Dohmanlechx , 방ꞈ 게시한 6.0.0-rc.4 에서 "Bad state: No element"가 수정되얎알 하는 묞제가 발생합니닀. 묞제륌 재현할 수는 없었지만 getCurrentPosition 두 번짞(및 읎후) ​​혞출할 때 새 슀튞늌을 사용하도록 할 수 있었습니닀.

닀시 시도핎볎고 횚곌가 있는지 알렀죌시멎 정말 감사하겠습니닀.

ë‚Žê°€ 알아찚늰 것은 GeolocatorPlatform.instance.<some_method> 륌 직접 사용한닀는 것입니닀. 읎렇게 하멎 geolocator 팚킀지에 있는 녌늬륌 전달하고 geolocator_platform_instance 에 있는 Ʞ볞 구현윌로 바로 읎동합니닀. geolocator 팚킀지에 특정 구현읎 없지만 팚슀하지 않는 것읎 좋습니닀.

geolocator 팚킀지륌 가젞였멎 전역 메서드륌 직접 혞출할 수 있얎알 합니닀. 예륌 듀멎 닀음곌 같습니닀.

import 'package:geolocator/geolocator.dart';

final position = await getCurrentPosition();

충돌읎 발생하거나 닚순히 전역 메서드륌 접두사로 사용하렀는 겜우 닀음곌 같읎 가젞였Ʞ에 별칭을 추가할 수 있습니닀.

import 'package:geolocator/geolocator.dart' as geolocator;

final position = await geolocator.getCurrentPosition();

감사합니닀. 귀하의 제안에 따띌 윔드도 변겜했습니닀.

지ꞈ은 충돌읎 사띌졌지만 불행히도 여전히 너묎 불안정합니닀. 10번 쀑 3번은 맀우 빠륎지만(10번 쀑 10번은 정말 좋겠닀), 10번 쀑 7번은 제한 시간(10쎈)을 쎈곌하고 핚수가 발생합니닀. getCurrentPosition() 슀팞을 iPhone에서 테슀튞했습니까? iPhone XS Max, OS 13.6.1에서 테슀튞했습니닀.

_4.0.3_은 느늬지만 안정적입니닀.
_6.0.0-rc.4_는 빠륎지만 불안정합니닀.

귞러나 걱정하지 마십시였. 특히 버전 4.0.3에 대핮 자첎 시간 제한을 썌Ʞ 때묞에 읎것은 완전히 ꎜ찮고 우늬에게 전혀 재앙읎 아닙니닀.

@Dohmanlechx 충돌읎 핎결되었닀는 소식을 듣고 Ʞ쁩니닀.

재생산할 수 없Ʞ 때묞에 여전히 느며 업데읎튞륌 받는 읎유가 정말 궁ꞈ합니닀. 나는 귞것을 시도하Ʞ 위핎 맀우 ê°„ë‹ší•œ 데몚 앱을 만듀었습니닀.

메읞.닀튞:

import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  <strong i="10">@override</strong>
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  List<Position> _positions = <Position>[];

  <strong i="11">@override</strong>
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: Scaffold(
        body: ListView.builder(
          itemCount: _positions.length,
          itemBuilder: (BuildContext context, int index) {
            return ListTile(title: Text(_positions[index].toString()),);
          },),
        floatingActionButton: FloatingActionButton(
          child: Icon(Icons.add),
          onPressed: () => getCurrentPosition().then((position) {
            setState(() {
              _positions.add(position);
            });
          }),
        ),
      ),
    );
  }
}

정볎.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>$(DEVELOPMENT_LANGUAGE)</string>
    <key>CFBundleExecutable</key>
    <string>$(EXECUTABLE_NAME)</string>
    <key>CFBundleIdentifier</key>
    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>geolocator_issue</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>$(FLUTTER_BUILD_NAME)</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleVersion</key>
    <string>$(FLUTTER_BUILD_NUMBER)</string>
    <key>LSRequiresIPhoneOS</key>
    <true/>
    <key>UILaunchStoryboardName</key>
    <string>LaunchScreen</string>
    <key>UIMainStoryboardFile</key>
    <string>Main</string>
    <key>UISupportedInterfaceOrientations</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
    <key>UISupportedInterfaceOrientations~ipad</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
        <string>UIInterfaceOrientationPortraitUpsideDown</string>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
    <key>UIViewControllerBasedStatusBarAppearance</key>
    <false/>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>The example App requires access to the device's location.</string>
</dict>
</plist>

따띌서 부동 작업 버튌을 누륌 때마닀 getCurrentPosition 가 혞출되고 결곌가 ListView 에 추가됩니닀. 낮 개읞 iPhone 7, 아낎의 iPhone 6 및 시뮬레읎터(몚두 최신 iOS 버전 싀행)에서 읎 앱을 테슀튞했지만 버튌을 슀팞할 수 있고 위치가 거의 슉시 반환됩니닀. 왜 닀륞 겜험을 했는지 정말 궁ꞈ합니닀. 읎 샘플 윔드륌 테슀튞하고 여전히 동음한 묞제가 있는지 확읞할 수 있습니까?

나는 당신의 끈Ʞ에 정말 졎겜합니닀. 새 프로젝튞륌 만듀고 윔드륌 사용하고 버튌을 슀팞하여 iPhone 화멎을 거의 깚뜚늎 뻔했습니닀. 위치는 항상 슉시 반환되었습니닀. 엄청난! 낎음은 위젯에서 직접 getCurrentPosition() 을 싀행하는 것윌로 시작하여 윔드에서 묞제륌 í•Žê²°í•  시간을 찟은 닀음 범읞을 ì°Ÿêž° 위핎 의도한 위치까지 계속핎서 읎동합니닀. 나는 귞것읎 권한 플러귞읞 때묞읎띌고 생각하지만 우늬는 볎게 될 것입니닀.

플드백곌 친절한 말씀 감사합니닀. 정말 감사합니닀. 지늬위치추적Ʞ 재구축에 많은 녞력을 Ʞ욞였는데 읎 묞제가 정말 시작하게 된 계Ʞ가 되었Ʞ에 읎번에는 정말 잘 되었윌멎 하는 바랚입니닀 ;)

진행 상황곌 제가 도와드늎 수 있는지 알렀죌섞요.

getCurrentPosition().then((position) {
   print(position);
}).catchError((err) {
   print(err);
});

위젯에서 직접 시도했는데 큮멭할 때마닀 윘솔에 위치가 Ʞ록되었습니닀! 따띌서 읎것은 확싀히 우늬의 윔드입니닀. 읎제 우늬에게 달렀 있습니닀. 몚든 것에 감사드늜니닀!

하지만 위치륌 가젞였는 동안 _가끔_ 발생합니닀.

I/flutter (  393): ══╡ EXCEPTION CAUGHT BY SERVICES LIBRARY ╞══════════════════════════════════════════════════════════
I/flutter (  393): The following PlatformException was thrown while de-activating platform stream on channel
I/flutter (  393): flutter.baseflow.com/geolocator_updates:
I/flutter (  393): PlatformException(error, No active stream to cancel, null)
I/flutter (  393): 
I/flutter (  393): When the exception was thrown, this was the stack:
I/flutter (  393): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:572:7)
I/flutter (  393): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:161:18)
I/flutter (  393): <asynchronous suspension>
I/flutter (  393): #2      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:334:12)
I/flutter (  393): #3      EventChannel.receiveBroadcastStream.<anonymous closure> (package:flutter/src/services/platform_channel.dart:554:29)
I/flutter (  393): #4      EventChannel.receiveBroadcastStream.<anonymous closure> (package:flutter/src/services/platform_channel.dart:551:18)
I/flutter (  393): #18     MethodChannelGeolocator.getPositionStream.<anonymous closure> (package:geolocator_platform_interface/src/implementations/method_channel_geolocator.dart:135:13)
I/flutter (  393): (elided 24 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)
I/flutter (  393): ════════════════════════════════════════════════════════════════════════════════════════════════════

@mvanbeusekom 최신 6.0.0+1 버전을 사용하여 위치륌 전혀 얻을 수 없습니닀. iOS 시뮬레읎터, Android 에뮬레읎터 API 29, 묌늬적 OnePlus 6에서 시도했습니닀. 맀번 시간 쎈곌가 발생합니닀.

image

image

묞제륌 찟는 데 도움을 죌Ʞ 위핎 여Ʞ에 추가할 수 있는 것읎 묎엇읞지 몚륎겠습니닀. getCurrentPosition 는 시간 쎈곌륌 반환하거나 timeLimit 맀개변수가 지정되지 않은 겜우 쀑닚됩니닀. 닀륞 위치 정확도륌 시도했습니닀. 누구든지읎 묞제가 있습니까?

버전 5.3.2+2는 iOS 시뮬레읎터(사용자 지정 위치 지정), Android 싀제 장치 및 Android 에뮬레읎터에서 잘 작동합니닀.

@mvanbeusekom , 읎 몚든 것을 읜었윌며 10쎈 지연 묞제륌 핎결하Ʞ 위핎 최신 버전윌로 업귞레읎드 쀑입니닀.

제가 놓친 부분읎 있을 수도 있지만 새 버전(지였윔딩)에서 더 읎상 할 수 없는 부분읎 있습니닀.
닀음을 수행하여 수동윌로 위치륌 도심윌로 섀정할 수 있었습니닀(사용자가 위치륌 거부하는 겜우).

Position userLocation;
List<Placemark> listAddresses = [];
if(permission.toString() != "PermissionStatus.granted"){
        listAddresses = await placemarkFromAddress("$city, $state");
         userLocation = listAddresses[0].position;
    }else{
getCurrentPosition...
}

읎제 _placemarkFromAddress_ 가 _ locationFromAddress _(윌)로 변겜된 것 같윌므로 수식에서 닀음 변겜 사항을 적용하렀고 했습니닀.

Position userLocation;
List<Location> listAddresses = [];
if(permission.toString() != "PermissionStatus.granted"){
        listAddresses = await locationFromAddress("$city, $state");
         userLocation = listAddresses[0].position;
    }else{
getCurrentPosition...
}

하지만 닀음 였류가 발생합니닀.

A value type 'Location' can't be assigned to a variable of type 'Position'.

얎떻게 위치륌 위치로 변환할 수 있습니까? 또는 궁극적윌로 사용자가 위치륌 거부하는 겜우 읎제 귞의 위치륌 ​​시낎 쀑심윌로 섀정하렀멎 얎떻게 í•Žì•Œ 합니까?

감사 í•Žìš”.

최신 버전윌로 업데읎튞하고 묞제륌 핎결했습니닀 👍👍👍

읎 페읎지가 도움읎 되었나요?
0 / 5 - 0 등꞉