0

現在の場所を取得するための次のコードがあります。

final LocationManager manager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
LocationListener listener=new LocationListener() {

    @Override
    public void onLocationChanged(Location location) {

        manager.removeUpdates(this);
        Toast.makeText(MainActivity.this, "2", Toast.LENGTH_LONG).show();
        if (location!=null) {
                                doSomeAction();
        }
        else {
            Toast.makeText(MainActivity.this, LOCATION_IS_NULL_MESSAGE, Toast.LENGTH_LONG).show();
        }
    }

    @Override
    public void onProviderDisabled(String provider) {
        manager.removeUpdates(this);
        String newProvider=provider.equals(LocationManager.GPS_PROVIDER) ? LocationManager.NETWORK_PROVIDER : null; 
        if (newProvider==null) {
            Toast.makeText(MainActivity.this, LOCATION_PROVIDERS_ARE_DISABLED_MESSAGE, Toast.LENGTH_LONG).show();
        }
        else {
            manager.requestLocationUpdates(newProvider, 0, 0, this);
        }
    }

    @Override
    public void onProviderEnabled(String provider) {}

    @Override
    public void onStatusChanged(String provider, int status,
            Bundle extras) {}

};
String provider=manager.isProviderEnabled(LocationManager.GPS_PROVIDER) ? LocationManager.GPS_PROVIDER : 
    LocationManager.NETWORK_PROVIDER;
Location location=manager.getLastKnownLocation(provider);
if (location!=null) {
                doSomeAction();
}
else {
    Toast.makeText(this, "1", Toast.LENGTH_LONG).show();
    manager.requestLocationUpdates(provider, 0, 0, listener);
}

トースト「1」は毎回表示されますが、トースト「2」は一度も表示されていないため、現在地が更新されていません。教えてください、現在地を取得する必要があります - どうすれば問題を解決できますか? ネットワーク ロケーション プロバイダーを使用しています。

4

2 に答える 2

0

実際にリスナーをアタッチしましたか? リスナーをアタッチしないとそのコードは役に立ちませんが、さらに afaik: LocationManager にリスナーがアタッチされていない場合、ロケーションは更新されません。

于 2013-01-06T12:48:19.363 に答える
0

このようにしてみてください:

public class Locato extends Activity implements LocationListener {

LocationManager locman;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.idlayout);
locman = (LocatonManager) getSystemService(Context.LOCATION_SERVICE);

}

 public void onStatusChanged(String pr, int s, Bundle a) {}

 @Override
    public void onProviderDisabled(String provider) {
       Log.d("MyApp", "Provider disabled : " + provider);
    }

    @Override
    public void onProviderEnabled(String provider) {
Log.d("MyApp", "Provider enabled : " + provider);
}

 @Override
    public void onLocationChanged(Location location) {
// do something
    }

また、マニフェストにアクセス許可を追加する必要があります:おおまかな場所にアクセスし、細かい場所にアクセスします

于 2013-01-06T13:31:41.217 に答える