Flutter-geolocator: Android Pie(API 28)Geolocator()。getCurrentPosition()が返されない

作成日 2018年11月02日  ·  39コメント  ·  ソース: Baseflow/flutter-geolocator

🐛バグレポート

Android Pie(API 28)を使用してAndroid EmulatorでGeolocator()。getCurrentPosition()を実行すると、呼び出しがまったく返されません。

API 27で同じコードを実行すると、場所が正常に返されます。 新しいエミュレータを作成しようとしましたが、何も変わりません。

構成

AndroidPieを搭載したAndroidエミュレーター(API 28)

バージョン: 2.1.0

プラットホーム:

  • []:iphone:iOS
  • [X]:robot:Android
android

最も参考になるコメント

同じ問題があり、機能するようにタイムアウトを設定しました。 タイムアウトが発生したとき、getLastKnownPosition()を呼び出します

Geolocator().getCurrentPosition().timeout(Duration(seconds: 10)).then((position) {
      //getting position without problems
      print(position);
    }).catchError((error) {
      if (error is TimeoutException) {
        Geolocator().getLastKnownPosition().then((position) {
          //getting last known position
          print(position);
        }).catchError((error) {
          //handle the exception
        });
      } else {
        //handle the exception
      }
    });

ストリームでも同じことができます

全てのコメント39件

ミーも、どうしたの? :(

こっちも一緒!

@savjolovsデバッグすると、デバッガーはGeolocator()。getCurrentPosition()で停止します。 mehtod後のブレークポイントはヒットしていません。 この動作を確認できますか?

拡張コントロールを使用していくつかの座標をプッシュするまで、ここで同じ動作をします。
2つの物理デバイスの1つで同じ動作。 最初はandroid5で-正常に動作し、別の場合は6-fakegpsの場所が関与するまで応答がありません。

ここに+1

誰かアイデアが原因は何ですか? この機能はすべてを壊しています、誰かが別のプラグインを試しましたか?

明らかなことを確認して、問題のある人のために、位置を取得して移動したためのgps信号がありますか? 更新される前に新しい場所を待っているのかどうか疑問に思っていますか?

@ibrierleyは、移動の有無にかかわらずGPS信号を取得できないようですが、同時に、Googleマップなどのさまざまなアプリで現在の位置を特定するのに問題はありません。 lastKnownPositionは、約数百メートル離れた場所を返します。 android 5では、場所の許可を求められなくても、まったく問題はありません(ただし、確かではありませんが、デバッグ時にこれを見逃した可能性があります)

アプリを閉じて再度開くことを除いて、Androidoreoでも同じ問題が発生します

私はAndroidWear時計をいじっていて、GPSで多くの問題を抱えていましたが、ほとんど機能しているようです(久しぶりにタイムアウトする可能性がありますが、それは別の問題だと思います)。

私はたくさんのことを試したので、正確に何がそれを機能させたのかわかりませんが、誰かがこれらをチェックして、それらが役立つかどうかを確認できるかもしれません。

0)デバイスがGPS信号を受信できることを確認してください。そのため、外部にあるか、エミュレーターを介して場所をフィードします(テスト用にダウンロードしたGPXルートをフィードします)。

1)画面がオンになっていることを確認します。 GPSが最小モードになっていると、GPSが呼び出されても、結果の返送が停止する場合があります。 ScreenパッケージとScreen.keepOn(true)を使用して、必要に応じて画面を強制的にオンにします。 画面がオフの場合、画面が再びオンになるまで、一連の場所を保持してバッファリングしているように見えます。

2)これらはAndroidManifest.xmlでの私の権限です、おそらく試してみる価値があります

`` `




特に最後のバージョンに注意してください。1つのバージョンで途中で変更があったと思いますが、それは役に立ったようです。 バッテリーの理由でwake_lockは必要ないかもしれませんが、問題がどこにあるかを取り除くためにこれを試してみると便利な場合があります。

3)Streamのタイムアウトに奇妙なことがあったので、最終的にgeolocator.getPositionStreamでストリームを開始しましたが、実際には使用していませんでした。 ストリームが実行されている状態で、タイマーに基づいてgetCurrentPosition(desiredAccuracy:LocationAccuracy.high)を呼び出しています。 私の元々の問題は画面がオフになっていることだったと思うので、これは今は必要ないと思いますが、興味をそそるだけで試す価値があるかもしれません。

誰かが上記を試しても機能しない場合は、場所だけで最小限のフラッターアプリを作成できますか?私の場合も同じように失敗するかどうかを確認します。 開始するのは、本来よりもはるかに苦痛です:/。

情報を提供してくれた@ibrierleyに感謝します。できるだけ早く試して、問題を解決した私の経験について報告します。

今日、物理デバイスでのGPSテストなどの追加ツールを使用して調査を行いました。
そのため、GPSテストでsatが利用できない場合(雲や大きな建物のために0が接続されている1が利用可能)、グーグルマップや他のマップサービスでも機能している場合は応答がありません。
satがオンラインの場合は応答がありませんが、位置オプションで距離が定義されていますが、この場合は100%ではありません-初期座標を取得するには、何らかのgpsドリフトが必要です。
私はlastknownlocationを使って、実際の位置データが利用可能になる前に現在の位置を必要とするアプリを開始するために、あそこに配置するためのトリックを行いました。
おそらく、GPSサービスがストリームを介して位置データを提供する準備ができていることを示すGeolocatorでのコールバックの可能性があるisReadyのようなある種のフラグを持つための優れたソリューションになるでしょう。

誰かがこれを試しましたか: httpshttps

私はそれを試しましたが、これで終わりました(そうではないというわけではありません)
でも試してみる価値はあります!)。 それらのすべてに「いくつかの」問題があります、私は本当に思います
Androidには明らかではないことがいくつかあるからです。

通常、どの場所でも場所が返されない場合に見つかりました
パッケージ)、それはフラッターなしの問題が原因です(たとえば、GPSが入りました
スリープモード、またはGPS信号なし)。

19:26 HerrNiklasRaabの木、2018年11月15日には[email protected]
書きました:

たとえば、誰かがこれを試しましたか?
https://github.com/Lyokone/flutterlocation 、またはこれ:
https://github.com/Lyokone/flutterlocation ? したがって、エラーを排除することができます
このパッケージとは関係ありません。


あなたが言及されたので、あなたはこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/BaseflowIT/flutter-geolocator/issues/135#issuecomment-439160446
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/ADuG9WRbZuJYvi5N_2xrrku-Jurk6trIks5uvb_SgaJpZM4YKDSm

誰かが私のものを試してみますか?
flutter_background_geolocation

興味のない画面をオフにして動作しますか?

2018年11月15日木曜日午後8時16分クリススコット[email protected]
書きました:

誰かが私のものを試してみますか?
flutter_background_geolocation
https://pub.dartlang.org/packages/flutter_background_geolocation#-readme-tab-


あなたが言及されたので、あなたはこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/BaseflowIT/flutter-geolocator/issues/135#issuecomment-439175841
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/ADuG9f5uvZK0lDnYecMoFZhJnF0ylz6Pks5uvcuygaJpZM4YKDSm

アプリを終了したり( stopOnTerminate: false )、デバイスを再起動したり( startOnBoot: true )しても機能します。

私は同じ問題に直面していますが、それはgetCurrentPositionから戻ることはありません。
私は次のコードを持っています:
position = await Geolocator() .getCurrentPosition(desiredAccuracy: LocationAccuracy.best); setState(() { _position = position; }); if (position == null) Fluttertoast.showToast( msg: 'Position is null', toastLength: Toast.LENGTH_SHORT); else Fluttertoast.showToast( msg: 'Got Position', toastLength: Toast.LENGTH_SHORT);

権限は次のとおりです。
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.hardware.location.gps" /> <uses-permission android:name="android.hardware.location.network" /> <uses-permission android:name="android.permission.WAKE_LOCK" />
プログラムを実行すると、画面の上部に位置インジケーターが表示され、プログラムを閉じるまで静止します。
助けてください。

同じことが起こり、getCurrentPositionはAPI23を使用して機能しません。
現在の位置を取得するために機能するこのパッケージまたは代替パッケージの回避策はありますか?

少し注意が必要です。 最初にGoogleMapアプリを起動し、現在地をタップしたときにGPSを有効にする許可を求めることで、今すぐ機能させることができます。 その後、getCurrentPositionは突然チャームのように機能します。

私の場合、APIを使用して場所を取得することはできません。これで問題が解決するかどうかはわかりませんが、
ここでNOT演算子を削除してみて、 returnステートメントを追加すると、機能しました。 https://github.com/BaseflowIT/flutter-geolocator/blob/master/android/src/main/java/com/baseflow/flutter/plugin/geolocator/tasks/LocationUpdatesUsingLocationManagerTask.java#L52

// If we are listening to multiple location updates we can go ahead
// and report back the last known location (if we have one).
if(mStopAfterFirstLocationUpdate && mBestLocation != null) {
reportLocationUpdate(mBestLocation);
return;
}

本番環境で失望させた別のプラグインを使用した後、本当に迅速な修正を行う必要があったので、これに遭遇しました。 API 23(物理デバイス)、API 24(物理デバイス)、API 28(物理デバイス)でこれをテストしましたが、問題がなかったことを確認できます。 API 23で、Googleが位置情報などを改善するのを手伝いたいかどうか尋ねられ、「はい」と答えたところ、約20秒後に位置情報が読み込まれました。 過去に、エミュレーターを場所に戻す(Androidのネイティブ開発)という実際の問題がありましたが、それはエミュレーターの問題でしょうか?

同じ問題があり、機能するようにタイムアウトを設定しました。 タイムアウトが発生したとき、getLastKnownPosition()を呼び出します

Geolocator().getCurrentPosition().timeout(Duration(seconds: 10)).then((position) {
      //getting position without problems
      print(position);
    }).catchError((error) {
      if (error is TimeoutException) {
        Geolocator().getLastKnownPosition().then((position) {
          //getting last known position
          print(position);
        }).catchError((error) {
          //handle the exception
        });
      } else {
        //handle the exception
      }
    });

ストリームでも同じことができます

@NMateu

エミュレータでも同じ問題が発生しましたが、 .forceAndroidLocationManager = true;修正されました。 融合したロケーションマネージャーが邪魔になることがあるようです。

これに関するニュースはありますか?

誰かが問題を解決することができましたか? 私は本当にこれを成し遂げる必要があります、皆さん!

同じ問題ですが、iOSデバイスではうまく機能しますが、最近ではAndroidで場所を取得できません。

はい、実際には、配置placemarkFromAddressメソッドを使用して住所を取得できます。 しかし、場所自体は壊れています。

ここに同じ問題

void _getUserLocation()async {
Geolocator geolocator = Geolocator().. forceAndroidLocationManager = true;
GeolocationStatus geolocationStatus = await geolocator.checkGeolocationPermissionStatus();
位置position = await Geolocator()
.getCurrentPosition(desiredAccuracy:LocationAccuracy.high);
リストplacemark = await Geolocator()
.placemarkFromCoordinates(position.latitude、position.longitude);
print( "-----------------");
print(placemark [0] .position);
print(geolocator.toString());
print(geolocationStatus.toString());
setState((){
_initialPosition = LatLng(position.latitude、position.longitude);

  locationController.text = placemark[0].name;
});

}

間違った場所を示しています。

I / flutter(7363):Lat:37.421999899999996、Long:-122.08405750000001
I / flutter(7363):「Geolocator」のインスタンス
I / flutter(7363):GeolocationStatus.granted

void _getUserLocation()async {
Geolocator geolocator = Geolocator().. forceAndroidLocationManager = true;
GeolocationStatus geolocationStatus = await geolocator.checkGeolocationPermissionStatus();
位置position = await Geolocator()
.getCurrentPosition(desiredAccuracy:LocationAccuracy.high);
リスト目印= Geolocator()を待つ
.placemarkFromCoordinates(position.latitude、position.longitude);
print( "-----------------");
print(placemark [0] .position);
print(geolocator.toString());
print(geolocationStatus.toString());
setState((){
_initialPosition = LatLng(position.latitude、position.longitude);

  locationController.text = placemark[0].name;
});

}

このスニペットでエミュレーターで動作します
Geolocator()..forceAndroidLocationManager = true;

このパッケージはすべての魅力のように機能しました

(https://github.com/alfanhui/new_geolocation)

私はいくつかのAndroidデバイスで同じ問題に直面していました。 しかし、私はそれに対する解決策を見つけました-

Geolocator().. forceAndroidLocationManager = trueの値を設定するだけです。

最終的なGeolocatorgeolocator = Geolocator().. forceAndroidLocationManager = true;

バージョン6.0.0で解決

位置position = await Geolocator.getCurrentPosition(
desiredAccuracy:LocationAccuracy.low、forceAndroidLocationManager:true);
それは私の問題を修正しました

行forceAndroidLocationManagerでエラーが発生し、赤い線が表示されます。エラーは..... "セッター 'forceAndroidLocationManager'がタイプ 'Geolocator'に対して定義されていません。
'forceAndroidLocationManager'を定義するライブラリをインポートするか、名前を既存のセッターの名前に修正するか、 'forceAndroidLocationManager'という名前のセッターまたはフィールドを定義してみてください。

@ aditikumar-pngどのバージョンのジオロケーターを使用していますか? 最近、バージョン6.xに更新した可能性があります。 このバージョンには重大な変更があります。 Geolocator().forceAndroidLocationManagerプロパティをgetCurrentPosition getPositionStreamメソッドと

これは、次のようにジオロケーターを使用できることを意味します。

final position = await Geolocator.getCurrentPosition(forceAndroidLocationManager: true);

古いものの代わりに:

final geolocator = Geolocator();
geolocator.forceAndroidLocationManager = true;

final position = await geolocator.getCurrentPosition();

@ aditikumar-pngどのバージョンのジオロケーターを使用していますか? 最近、バージョン6.xに更新した可能性があります。 このバージョンには重大な変更があります。 Geolocator().forceAndroidLocationManagerプロパティをgetCurrentPosition getPositionStreamメソッドと

これは、次のようにジオロケーターを使用できることを意味します。

final position = await Geolocator.getCurrentPosition(forceAndroidLocationManager: true);

古いものの代わりに:

final geolocator = Geolocator();
geolocator.forceAndroidLocationManager = true;

final position = await geolocator.getCurrentPosition();

どうもありがとう!!!!! あなたは数秒で私の問題を解決しました私は9時間以来これに苦労していました

このページは役に立ちましたか?
0 / 5 - 0 評価