Android GPS只是第一次改变位置onLocationChanged,为什么?

时间:2011-08-16 12:56:58

标签: android eclipse gps

我仍在测试android gps功能,现在让我的Eclipse提供一个位置onCreate() getLastKnownLocation()和一个onLocationChanged()事件。但是当我使用telnet-interface的geo fix命令发送更多位置更改时,我没有进一步的事件调用。可能是什么原因?

我的输出意味着他在启动App后开始侦听更改(有一个GpsStatus.GPS_EVENT_STARTED事件)然后在收到位置更新后他会自动停止监听(有一个GpsStatus.GPS_EVENT_STOPPED事件)

有关详细信息,请查看我的代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    LocationManager l =(LocationManager) getSystemService(Context.LOCATION_SERVICE);
    List<String> li = l.getAllProviders();
    for (Iterator<String> iterator = li.iterator(); iterator.hasNext();) {
            String string =  iterator.next();
            Log.i(TAG, string);
    }
    if (l.getLastKnownLocation("gps")==null)
        Log.i(TAG, "null"); 
    else{            
        Log.i(TAG, l.getLastKnownLocation("gps").toString());
    }

    l.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}

...

@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
    String txt = "onStatusChanged:"+arg0+":";
    switch(arg1){
        case GpsStatus.GPS_EVENT_FIRST_FIX:
            txt += "first fix";
            break;
        case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
            txt += "sat status";
            break;
        case GpsStatus.GPS_EVENT_STARTED:
            txt += "event started";
            break;
        case GpsStatus.GPS_EVENT_STOPPED:
            txt += "event stopped";
    }
    Log.i(TAG, txt);
}

...

@Override
public void onLocationChanged(Location arg0) {
    Log.i(TAG, "onLocationChanged:" +arg0.toString());
}

这里的清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.mypackage.example.gps"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="3" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".gpsActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
        </activity>
    </application>
</manifest>

2 个答案:

答案 0 :(得分:1)

将您的位置更新代码放在onResume方法中。

像这样,

@Override
   public void onResume() {
      super.onResume();
           locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000L,1.0f, this);
    locationManager.requestLocationUpdates(
            LocationManager.NETWORK_PROVIDER, 1000L, 1.0f, this);
    locationManager.addGpsStatusListener(this);

}

并且还给出了像毫秒时间和浮动距离等参数。

希望这会对你有所帮助。

如果您发现此答案有帮助,请将其投票给其他人。

答案 1 :(得分:1)

错误报告中包含1.5版SDK的解决方法。

In the emulator, on the Home Screen, press "Menu" -> "Settings" -> "Date & Time" -> Uncheck "Automatic" -> "Select Time Zone", and choose the right time zone (ie, yours). 

进一步详情请参阅此问题"Manually added location updates stop working in Eclipse"