0

目標: 一度 GPS 位置を特定し、緯度/経度を 2 つの個別の EditText ボックスに配置して、ユーザーに表示します。

問題: 自分の方法をテストしたところ、エミュレータで問題なく動作しました。GPS 座標を送信したところ、問題なく動作しました。2 つの別々のデバイス (v2.1 電話、v4.0 ICS タブレット) で試してみると、GPS アイコンが通知に表示されます (すべて問題ありません) が、場所を特定しようとしてそこにとどまります。私はそれを何度もテストし、テストするたびに十分な時間を与えました. 編集:外に出たときに電話で問題なく動作するので、これを消すことができます。タブレットにはまだ問題があります。

私はブリスベンの真ん中にいるので、位置の問題だとは思えません。さらに、Google マップは GPS 経由で私の位置を特定する際に問題なく機能します。

GPS をオフにして、デフォルトでネットワークの位置情報に戻すと、うまく機能し、位置情報が得られます。

メソッド:

(私が呼び出すメソッド);

public void locateCoordinates(EditText latitudeInput, EditText longitudeInput) {
    // Find coordinates, place them in EditText boxes.

    // Create the locating services if needed
    if(locManager == null) {
        locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    }
    if(locListener != null) {
        // Unregister listener from locManager (in case of double click of Locate button)
        locManager.removeUpdates(locListener);
    }
    locListener = new LocListenerImpl(locManager, latitudeInput, longitudeInput);

    if(locManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
        locManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, 0, 0, locListener);
    } else if(locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
        locManager.requestLocationUpdates(
                LocationManager.NETWORK_PROVIDER, 0, 0, locListener);
        Toast.makeText(this,
                "GPS unavailable, trying network-based location instead.",
                Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(this,
                "No locating methods enabled", Toast.LENGTH_SHORT).show();
    }

}

(リスナー実装クラス);

public class LocListenerImpl implements LocationListener {

    private LocationManager locManager = null;
    private EditText latitudeInput = null;
    private EditText longitudeInput = null;

    public LocListenerImpl(LocationManager locManager, EditText latitudeInput, EditText longitudeInput) {
        this.latitudeInput = latitudeInput;
        this.longitudeInput = longitudeInput;
        this.locManager = locManager;
    }

    public void onLocationChanged(Location location) {
        if(location != null) {
            latitudeInput.setText(String.valueOf(location.getLatitude()));
            longitudeInput.setText(String.valueOf(location.getLongitude()));
            locManager.removeUpdates(this); // Location found, unregister listener
        }
    }

    public void onProviderDisabled(String provider) {}
    public void onProviderEnabled(String provider) {}
    public void onStatusChanged(String provider, int status, Bundle extras) {}
}

何が間違っていたのか、何が原因なのか分からず困っています。どんな助けでも大歓迎です!

4

3 に答える 3

0

デバイスが位置を取得できない理由として考えられるのは、空がはっきりと見えないために衛星に接続できないことです。場所を特定するためにキャリアプロバイダーのみが必要なため、ネットワーク (セル三角測量) を介して場所を取得しています。Google マップは、利用可能なすべての方法 (Wi-Fi、ネットワーク、GPS) を組み合わせて検索します。実際のデバイスでテストするには、空に行って新鮮な空気を吸うことをお勧めします:)

于 2012-07-26T05:34:48.740 に答える
0

locManager.removeUpdates(this) this を onStop() のような他のメソッドまたは同じメソッド内のelseループに入れてみてください

于 2012-07-26T05:25:52.507 に答える
0

あなたのコードは完全に問題ないように見えるので、デバイスに問題があるはずです..

適切な GPS ロックを取得するのに 10 分程度かかる場合があります..インターネットに接続していない場合、インターネットから衛星エフェメリスに関する粗いデータをダウンロードできないため、衛星を見つけるのに長い時間がかかります..あなたは空をはっきりと見ることができます。

ネットワークプロバイダーは反対側ですぐに表示されるので、もう少し待ってみてください..または、デバイスを再起動するか、位置設定で位置情報サービスのチェックボックスをオフにしてからオンにしてみてください (GPS 修正を取得できなかった一部の人々を助けました)。 )、または GPSに関するより具体的なデータ (前回の修正時間、最初の修正までの時間、aGPS データのステータス、衛星の詳細など) を確認できるGPS ステータスアプリをダウンロードしてみてください。

于 2012-07-26T05:28:45.087 に答える