我无法获取 GPS 位置

Posted

技术标签:

【中文标题】我无法获取 GPS 位置【英文标题】:I am unable to get GPS location 【发布时间】:2014-04-18 22:36:58 【问题描述】:

1.下面的代码给了我网络位置,但没有给出 GPS 位置 2.当我禁用我的 WIFI 时,它会提供网络位置 3.当我禁用我的网络时,它只显示最后一个已知位置 4.首先我需要检查网络是否可用 5.如果网络可用从网络获取位置 6.否则需要获取GPS位置

public class GetandGiveLocation extends Service implements LocationListener 

    private final Context mContext;

    boolean isGPSEnabled = false;

    boolean isNetworkEnabled = false;

    boolean canGetLocation = false;

    Location location;
    double latitude;
    double longitude;
    String bestProvider;

    private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 0;

    private static final long MIN_TIME_BW_UPDATES = 0;

    protected LocationManager locationManager;

    public GetandGiveLocation(Context context) 
        this.mContext = context;
        getLocation();
    

    public Location getLocation() 
        try 

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

            isGPSEnabled = locationManager
                    .isProviderEnabled(LocationManager.GPS_PROVIDER);

            isNetworkEnabled = locationManager
                    .isProviderEnabled(LocationManager.NETWORK_PROVIDER);

            if (!isGPSEnabled && !isNetworkEnabled) 
                showSettingsAlert();
             else 
                this.canGetLocation = true;

                if (isNetworkEnabled) 

                    locationManager.requestLocationUpdates(
                            LocationManager.NETWORK_PROVIDER,
                            MIN_TIME_BW_UPDATES,
                            MIN_DISTANCE_CHANGE_FOR_UPDATES, this);

                    if (locationManager != null) 
                        location = locationManager
                                .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                        if (location != null) 
                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
                        
                    
                
                if (isGPSEnabled) 

                    locationManager.requestLocationUpdates(
                            LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES,
                            MIN_DISTANCE_CHANGE_FOR_UPDATES, this);

                    if (locationManager != null) 
                        location = locationManager
                                .getLastKnownLocation(LocationManager.GPS_PROVIDER);
                        if (location != null) 
                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
                        

                    

                

            

         catch (Exception e) 
            e.printStackTrace();
        

        return location;
    

    public boolean canGetLocation() 
        return this.canGetLocation;
    

    @Override
    public void onLocationChanged(Location location) 

        latitude = location.getLatitude();
        longitude = location.getLongitude();
        GoogleMapViewer gmv = new GoogleMapViewer();
        SendToWebsite stw = new SendToWebsite();
        stw.execute(latitude, longitude);

    


【问题讨论】:

【参考方案1】:

我猜你可能想要改变

if (isNetworkEnabled) 
    ...

if (isGPSEnabled) 
    ...

if (isNetworkEnabled) 
    ...

else if (isGPSEnabled) 
    ...

否则,如果两者都可用,它(我假设)在转向 GPS 之前不会尝试 WiFi。

选择 GPS 后,可能需要一些时间来预热。在此期间,getLastKnownLocation 可能已过时甚至为空。

我已经使用 GPS 实现了一些代码,用于确定 GPS 是否以及何时准备好提供有效数据(已获得第一次修复)。你可以在这里找到代码:Location servise GPS Force closed

虽然代码只关心 GPS,但也必须进行修改以处理网络定位。我记得,我在上面的链接中引用的原始代码也确实有网络定位,所以应该不难再添加。

希望这会有所帮助 - 编码愉快

【讨论】:

以上是关于我无法获取 GPS 位置的主要内容,如果未能解决你的问题,请参考以下文章

无法从 gps 获取位置

Android GPS 无法获取我的位置

无法访问 GPS。应用程序使用网络获取位置

Cordova 地理定位插件无法从 Android 的 GPS 获取位置

即使启用了 GPS,也无法获取位置

如果 GPS 被禁用,位置将无法进入三星手机