最近 Android プロジェクトに取り組んでいて、位置情報を取得するために GPS を使用する必要があったので、API から確認したところ、位置情報の取得には非常に簡単な文だけが必要であることがわかりました。しかし、コードに書いたとたんに戻り値(Location型)が常にnullになってしまい…とてもイライラしました。インターネットで長い間検索した結果、多くの人が私と同じようにこの問題に悩まされていることがわかりました。GPS がオンになっていないためだと言う人もいれば、関連する権限が追加されていないためだと言う人もいます。ただし、私のものは設定で明らかにオンになっており、許可も自然に追加されています。長い間 API と格闘した結果、GPS をオンにするのは実際には
getLastKnownLocation(LocationManager.GPS_PROVIDER),
という文に依存していることがわかりました。これは携帯電話の設定とは何の関係もありません (少なくともこれは)。携帯電話でテストしたもの)。電話機の設定がオフになっている場合でも、この文はオンにすることができます。また、電話機の設定がオンになっている場合でも、この行がなければ役に立ちません。この文に相当するのは、GPS をオフにするために使用される
setTestProviderEnabled("gps",true);
です。
GPS をオンにした後、上記の方法を使用して位置情報を取得できますか?まだできない!正確に言うと、この関数は前回取得した位置情報を取得しているため、可能な場合もあります。このプログラムを初めて実行する場合、位置情報は取得されていないので、当然戻り値は null になります。 。 API を注意深く確認したところ、setTestProviderEnabled("gps",false);
requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener)
public void onLocationChanged(Location location) { Log.i("onLocationChanged", "come in"); if (location != null) { Log.w("Location","Current altitude = "+ location.getAltitude()); Log.w("Location","Current latitude = "+ location.getLatitude()); } }
以下はテスト コードです。必要な権限は次のとおりです:
manager.removeUpdates (listener);//listener 即为监听器实例 manager.setTestProviderEnabled("gps",false);
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"></uses-permission> <uses-permission android:name="android.permission.UPDATE_DEVICE_STATS"></uses-permission>
Android が GPS ナビゲーションをオンにして位置情報を取得し、null ソリューションを返す場合の詳細については、注意してください。関連記事については、PHP 中国語 Web サイトにアクセスしてください。