Geocoder的isPresent()方法总是返回false

时间:2012-01-31 06:39:10

标签: android google-geocoder

我编写了一个简单的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?

提前多多谢谢!

3 个答案:

答案 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线程(主要活动)不允许花费太多时间的任务,因此该方法返回空列表。