0

現在の場所を見つけるためのコードは次のとおりですが、取得ボタンを押しても画面に何も表示されません。
adbをリセットし、エミュレーターコントロールから手動でデータを送信しようとしました。しかし、エミュレーター制御を使用してデータを送信すると、エミュレーターは再起動しますが、ホーム画面が表示されません。
助けてください。前もって感謝します。

public class LbsGeocodingActivity extends Activity {

    private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; // in Meters

    private static final long MINIMUM_TIME_BETWEEN_UPDATES = 1000; // in Milliseconds

    protected LocationManager locationManager;

    protected Button retrieveLocationButton;

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        retrieveLocationButton = (Button) findViewById(R.id.retrieve_location_button);

        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        locationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER,
                MINIMUM_TIME_BETWEEN_UPDATES,
                MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,
                new MyLocationListener()

        );
    retrieveLocationButton.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                showCurrentLocation();
            }
    });       

    }   

    protected void showCurrentLocation() {
        Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        if (location != null) {
            String message = String.format(
                    "Current Location \n Longitude: %1$s \n Latitude: %2$s",
                    location.getLongitude(), location.getLatitude()
            );
            Toast.makeText(LbsGeocodingActivity.this, message,
                    Toast.LENGTH_LONG).show();
        }
    }  

    private class MyLocationListener implements LocationListener {
        public void onLocationChanged(Location location) {
            String message = String.format(
                    "New Location \n Longitude: %1$s \n Latitude: %2$s",
                    location.getLongitude(), location.getLatitude()
            );

            Toast.makeText(LbsGeocodingActivity.this, message, Toast.LENGTH_LONG).show();
        }

        public void onStatusChanged(String s, int i, Bundle b) {
            Toast.makeText(LbsGeocodingActivity.this, "Provider status changed",
                    Toast.LENGTH_LONG).show();
        }

        public void onProviderDisabled(String s) {
            Toast.makeText(LbsGeocodingActivity.this,
                    "Provider disabled by the user. GPS turned off",
                    Toast.LENGTH_LONG).show();
        }

        public void onProviderEnabled(String s) {
            Toast.makeText(LbsGeocodingActivity.this,
                    "Provider enabled by the user. GPS turned on",
                    Toast.LENGTH_LONG).show();
        }

    }
}
4

2 に答える 2

1

コードでは、現在の場所を受信して​​いない可能性があります(これは、エミュレーター制御を介して手動で場所をプッシュする必要があるためです)。

showCurrentLocation()にもケースがあり、以下のようにロケーションオブジェクトがnullかどうかを確認します。

protected void showCurrentLocation() {
    Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    if (location != null) {
        String message = String.format(
                "Current Location \n Longitude: %1$s \n Latitude: %2$s",
                location.getLongitude(), location.getLatitude()
        );

    Toast.makeText(LbsGeocodingActivity.this, message,
                Toast.LENGTH_LONG).show();
    }else{
       Toast.makeText(LbsGeocodingActivity.this, "location is null",
                Toast.LENGTH_LONG).show();
    }
}  
于 2012-04-17T18:10:00.873 に答える
0

位置センサーを最初に使用しようとしたときに、同様の問題が発生しました。GPSから最良の結果を得るには、2つのことが最も役立ちます。

エミュレーターでLocation location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);は、多くの強制終了が発生します。

そして最も重要です。telnetを介してgpsデータを入力する方がはるかに安定しています。telnet localhost 5554ポートはエミュレータウィンドウのタイトルで確認できます)。新しいgps修正のコマンドは次のとおりです。geo fix lat lng

于 2012-04-18T08:42:52.863 に答える