0

更新2:问题已解决

在我在外面并通过 GPS_PROVIDER 收到信号后,现在我不再有问题可以通过 NETWORK_PROVIDER 获得位置修复了....

我仍然不知道为什么谷歌地图应用程序能够在我这样做之前得到修复,而我的应用程序没有,但现在它可以工作了(即使在重新启动银河选项卡之后),我有点高兴; )


更新:线程标题已更改,请参阅帖子底部的编辑。

我刚刚尝试了本教程(http://www.firstdroid.com/2010/04/29/android-development-using-gps-to-get-current-location-2/)来获取星系上的 GPS 位置标签,但我没有得到任何位置....

我已经尝试使用另一个提供商,但这根本没有帮助(我尝试了 GPS_PROVIDER、NETWORK_PROVIDER、PASSIVE_PROVIDER)。

奇怪的是,使用官方的谷歌地图应用程序,我得到了一个位置。:\

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 不可用,谷歌地图应用程序使用哪个提供商?

编辑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 Tab 是否有 3G 无线电并已连接到网络?如果没有,它将永远不会获得 network_provider 位置。

此外,您不需要这两个额外的 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 回答