Galaxy Tab - 应用程序在网络或被动提供商上没有GPS位置

时间:2012-03-29 14:15:26

标签: android location locationmanager galaxy-tab

更新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不可用,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 */

1 个答案:

答案 0 :(得分:0)

您的Galaxy标签是否有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) {

        }
    }   
}