0

更新 2: 問題は解決しました

外に出て GPS_PROVIDER で信号を受信した後、NETWORK_PROVIDER で位置情報を取得するのにもう問題はありません....

私がそれを行う前にGoogleマップアプリが修正された理由と私のアプリが修正されなかった理由はまだわかりませんが、今では(銀河タブを再起動した後でも)動作し、ちょっと幸せです; )


更新: スレッドのタイトルが変更されました。投稿の下部にある編集を参照してください。

銀河のGPS位置を取得するために、このチュートリアル(http://www.firstdroid.com/2010/04/29/android-development-using-gps-to-get-current-location-2/ )を試しましたタブがありますが、場所がわかりません....

すでに別のプロバイダーを使用しようとしましたが、これはまったく役に立ちません (GPS_PROVIDER、NETWORK_PROVIDER、PASSIVE_PROVIDER を試しました)。

奇妙なことは、公式の Google マップ アプリで場所を取得できることです。:\

AndroidManifest.xml の権限は次のように設定されています。

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

私のアプリケーションが場所を取得しない理由を誰かが知っていますか?

編集:

GPS プロバイダーを使用すると、外にいるときに修正されます。しかし、NETWORK_PROVIDER または PASSIVE_PROVIDER で場所を取得できない理由がわかりません。

GPS が利用できない場合、Google マップ アプリはどのプロバイダーを使用しますか?

編集2:

コード (上記のチュートリアルに若干の変更を加えたもの):

package Firstdroid.Tutorial.Gps; 

import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;

public class UseGps extends Activity {

    /** Called when the activity is first created. */

    @Override
    public void onCreate(Bundle savedInstanceState)

    {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        Toast.makeText(getApplicationContext(), "Application started", Toast.LENGTH_SHORT).show();

        /* Use the LocationManager class to obtain GPS locations */

        LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        LocationListener mlocListener = new MyLocationListener();

        // here I choose the location provider:
        mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, mlocListener); // <---

    }

    /* Class My Location Listener */

    public class MyLocationListener implements LocationListener {

        @Override
        public void onLocationChanged(Location loc) {

            loc.getLatitude();

            loc.getLongitude();

            String Text = "My current location is: " +

            "Latitude = " + loc.getLatitude() +

            "Longitude = " + loc.getLongitude() + " (PROVIDER: " + loc.getProvider() + ")";

            Toast.makeText(getApplicationContext(), Text, Toast.LENGTH_SHORT).show();

        }

        @Override
        public void onProviderDisabled(String provider) {

            Toast.makeText(getApplicationContext(), "Gps Disabled", Toast.LENGTH_SHORT).show();

        }

        @Override
        public void onProviderEnabled(String provider) {

            Toast.makeText(getApplicationContext(),

            "Gps Enabled", Toast.LENGTH_SHORT).show();

        }

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

        }

    }/* End of Class MyLocationListener */

}/* End of UseGps Activity */
4

1 に答える 1

0

Galaxy タブには 3G 無線があり、ネットワークに接続されていますか? そうでない場合、network_provider の場所を取得することはありません。

また、これら 2 つの余分な loc.getLatitude と loc.getLongitude の呼び出しは必要ありませんが、これらを使用して変数を設定し、出力メッセージで変数を使用することをお勧めします。これにより、GPSData.getLatitude() などを呼び出して、必要な値を取得できるようになりました。

public class GPSData {
    private static double latitude;
    /**
     * @return the latitude
     */
    public static double getLatitude() {
        return latitude;
    }

    /**
     * @param latitude the latitude to set
     */
    public static void setLatitude(double l) {
        latitude = l;
    }

    private static double longitude;
    /**
     * @return the longitude
     */
    public static double getLongitude() {
        return longitude;
    }

    /**
     * @param d the longitude to set
     */
    public static void setLongitude(double d) {
        longitude = d;
    }

    private static float accuracy;
    /**
     * @return the accuracy
     */
    public static float getAccuracy() {
        return accuracy;
    }

    /**
     * @param f the accuracy to set
     */
    public static void setAccuracy(float f) {
        accuracy = f;
    }

    //Altitude is in feet
    private static double altitude;

    public static void setAltitude (double a) {
        altitude = a;
    }

    public static double getAltitude() {
        return altitude;
    }


    /**
     * New location listener to be instantiated for getting locational data
     *
     */
    public static class MyLocationListener implements LocationListener {
        public void onLocationChanged(Location location) {
            setAccuracy(location.getAccuracy());
            setLongitude(location.getLongitude());
            setLatitude(location.getLatitude());
            //Altitude is in feet
            setAltitude(location.getAltitude());
        }

        @Override
        public void onProviderDisabled(String provider) {

        }

        @Override
        public void onProviderEnabled(String provider) {

        }

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

        }
    }   
}
于 2012-03-29T14:44:32.393 に答える