我编写了一个简单的Activity来测试Geocoder的存在,调用Geocoder.isPresent()总是返回false。
类别:
public class LocationTestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
Log.d( "LocationTestActivity", "Geocoder.isPresent : " + Geocoder.isPresent() );
}
}
AndroidManifest.xml在“application”元素之前还有以下条目:
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
环境:Eclipse Indigo 3.7.1,XP Professional 2002 SP 3上的ICS 4.0模拟器
请帮助我理解:
1.为什么Geocoder.isPresent()总是假装?
2.进行了哪些更改,以便Geocoder.isPresent()返回true?
提前多多谢谢!
答案 0 :(得分:5)
实际上Geocoder
需要框架在后台运行服务。
来自文档:
如果没有,Geocoder查询方法将返回一个空列表 平台中的后端服务。使用isPresent()方法 确定是否存在Geocoder实现。
因此,如果我们查看isPresent()
的文档,请说明。
如果Geocoder方法为getFromLocation,则返回true getFromLocationName已实现。可能缺乏网络连接 仍会导致这些方法返回null或空列表。
注意:请注意,Pre-Api 9平台无法使用isPresent()
。
答案 1 :(得分:1)
在模拟器或设备中测试此代码?当我在2.2模拟器上使用GeoCoder时,我遇到了同样的问题。但代码在2.1模拟器上工作正常。尝试使用2.1
代码必须在设备上正常运行。
答案 2 :(得分:1)
使用AsyncTask
使用geocoder
从服务器获取坐标。例如,应使用getFromLocationName()
调用AsyncTask
。 UI线程(主要活动)不允许花费太多时间的任务,因此该方法返回空列表。