48
LocationManager locationManager = (LocationManager)getApp().getSystemService(Context.LOCATION_SERVICE); //getApp() returns my Application object
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER , 1, 1, this);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1, 1, this);

这就是我用来收听的代码。启用 GPS 后,一切正常。但是,如果我禁用 GPS 并依赖网络位置,它会给我带来陈旧的结果——在这种情况下,是两天前的结果。我无法让它更新。调用 getLastKnownLocation 返回相同的陈旧结果。

谷歌地图更新很好,所以我知道这不是硬件/系统配置问题。

我用谷歌搜索,发现一些人有类似的问题,但没有答案。我尝试将我的项目定位到 API 级别 8 (2.2) 和 15 (4.0.3)。结果相同。我的手机正在运行 ICS。

我还尝试删除对 GPS_PROVIDER 的请求,以及在 getAllProviders() 中包含对所有内容的请求。同样的交易。

知道为什么 NETWORK_PROVIDER 没有更新吗?任何帮助将不胜感激。

(PS 不,我通常不使用“1, 1”作为时间/距离参数;我只是在调试时更改了它。)

编辑:我忘了提到是的,isProviderEnabled() 返回 true。

4

5 回答 5

23

我终于找到了解决这个问题的方法(请参阅我的问题here)。

在我的 S3 Galaxy Mini 上,有类似的症状(在重新启动之前没有位置更新......),就像上面描述的那样。大多数情况下,当设备达到低电量条件时,位置信息就会停止更新,但有时即使手机充满电,也会发生这种情况。显然这是在某处的问题LocationManager。我设法LocationManager通过使用新的 Google Play Services API 来绕过位置(LocationClient类)。

这可能是位置更新仍在使用 Google 地图的原因,因为 Google 地图甚至在公开之前就使用了 Google Play 服务 API。

我建议您点击 此链接,该链接展示了如何使用 Play Services API 来获取位置,而不是在LocationManager遇到此问题时使用。

我正在使用 Play Services 运行位置更新,并且绝对没有这样的问题 - 我随时都会收到定期的位置更新。

请注意,这将要求用户必须在其设备上安装 Google Play,因此 Kindle 等设备将不适用。它还需要至少 Android 2.2。

于 2013-07-30T21:25:35.997 回答
0

I currently suspect it is caused by not using removeUpdates(listener) on app shutdown or activity ondestroy. I have made sure to implement that and hope it fixes it. I can't think of anything else.

--edit-- This did not fix it unfortunately.

于 2013-05-15T17:51:59.937 回答
0

如果您正在使用新手机,您必须检查您是否已接受谷歌地图应用程序中的所有协议 - 否则您将不会收到来自 NETWORK_PROVIDER 的任何更新。

于 2013-08-09T12:27:51.397 回答
-2

1)首先您检查您是否已授予上述建议的权限。2)您必须确保您的手机可以上网。3)请找到下面的代码。

public void getLocationByNetworkProvider()
{       
    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000, 10, new LocationListener() {
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub


        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub

        }

        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub

        }

        public void onLocationChanged(Location location) {
         location.getLatitude();                                location.getLongitude();

        }
    });     

}`
于 2013-07-27T14:10:00.447 回答
-3

您可以像这样使用更新位置。Locationlistener 将用于位置....

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

import android.util.Log;

public class MainActivity extends Activity implements LocationListener{

protected LocationManager locationManager;
protected LocationListener locationListener;
protected Context context;
TextView txtLat;
String lat;
String provider;
protected String latitude,longitude;
protected boolean gps_enabled,network_enabled;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

txtLat = (TextView) findViewById(R.id.textview1);

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}

@Override
public void onLocationChanged(Location location) {

txtLat = (TextView) findViewById(R.id.textview1);
txtLat.setText("Latitude:" + location.getLatitude() + ", Longitude:" +      location.getLongitude());

}

@Override
public void onProviderDisabled(String provider) {
Log.d("Latitude","disable");
}

@Override
public void onProviderEnabled(String provider) {
Log.d("Latitude","enable");
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
Log.d("Latitude","status");
}


}
于 2013-08-16T10:30:49.343 回答