テスターの電話の 1 つでユーザーの位置情報を取得する際に問題が発生しています。私にとってはいつもうまくいくので、違いが何であるかわかりません。
シーケンスは次のとおりです。
1: 電話を再起動します。2. 位置情報サービスが有効になっていることを確認します (GPS とネットワークの両方)。3. アプリを起動します。
OS が有効な場所を提供することはありません。getLastKnownLocation() は GPS_PROVIDER と NETWORK_PROVIDER の両方に対して常に null を返し、LocationListener は LocatioUpdates を要求した後に呼び出されることはありません。
- 次に、彼は Google マップ アプリを実行します (これは彼の位置を特定しているようです)。
- 次に、彼が私のアプリを再度実行すると、場所が正しく取得されます。
私のコードの基本は次のとおりです。
LocationManager locationManager = (LocationManager) this.getSystemService( Context.LOCATION_SERVICE );
LocationListener locationListener = new LocationListener()
{
public void onLocationChanged( Location location )
{
useLocation( location );
}
public void onStatusChanged( String provider, int status, Bundle extras )
{
}
public void onProviderEnabled( String provider )
{
}
public void onProviderDisabled( String provider )
{
}
};
// Register the listener with the Location Manager to receive location updates
// Checks a minimum of every 120 seconds. Location must change by 10000 meters
String provider = locationManager.getBestProvider( new Criteria(), true );
if ( provider != null )
{
System.out.println( "Using provider: " + provider );
locationManager.requestLocationUpdates( provider, 120 * 1000, 10000, locationListener );
}
// Get the last know location for immediate use
Location lastLocation = locationManager.getLastKnownLocation( LocationManager.GPS_PROVIDER );
if ( lastLocation != null )
useLocation( lastLocation );
else
useLocation( locationManager.getLastKnownLocation( LocationManager.NETWORK_PROVIDER ) );
失敗すると、コードは最良のプロバイダーが「ネットワーク」であることを示しているので、それを使用します。しかし、onLocationChanged が呼び出されることはありません。また、getLastKnowLocation() から null 以外の値を取得することもありません。
再起動後にこれを一貫して機能させるために必要な魔法はありますか?