0

次のコードを使用して、アプリで場所を取得したい:

public Location getLocation() {     

    boolean isGPSEnabled     = false;
    boolean isNetworkEnabled = false;

    try {   

        // Getting GPS and Network status
        isGPSEnabled     = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

        if (!isGPSEnabled && !isNetworkEnabled) return null;

        LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        location                = manager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

        if ((location != null && (location.getTime() + 60000 < System.currentTimeMillis())) || 
                location == null){
            location = manager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
        }                           

    } catch (Exception e) {
        e.printStackTrace(); 
        return null;
    }

    return location;
}

Nexus 4 を使用している場合、正常に動作し、場所に値があります。しかし、Galaxy S2 location = null で同じコードを実行しているとき。

関数を呼び出す前に、GPS とネットワークの両方が有効になっていることを確認しました。

この関数をどのように修正しますか?

この関数を呼び出す前に、次の関数を呼び出します。

public void startLocation() {

    try {
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,MIN_TIME_BW_UPDATES,MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);    

    } catch (Exception e) {
        e.printStackTrace(); 
    }
}
4

2 に答える 2

2

デバイスがまだ場所を見つけていない場合は、null を返します。

Google マップを開いて、アプリを開く前に位置を特定できるようにすれば、期待どおりに機能するに違いありません。

Location service GPS Force closedに対する私の回答を参照してください。これは、場所が利用可能になるとすぐに知らせるコールバックを実装する方法の例です。

于 2013-11-07T00:08:02.420 に答える
0

.request... 関数のいずれかを呼び出してトリガーする必要があると思います。

于 2013-11-06T23:49:55.120 に答える