我仍在测试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>
答案 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"。