Geocoder 的 isPresent() 方法始终返回 false

发布于 2024-12-29 17:01:52 字数 1044 浏览 1 评论 0原文

我编写了一个简单的 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() 总是返回 false?
2. 需要进行哪些更改才能使 Geocoder.isPresent() 返回 true?

提前非常感谢!

I had written a simple Activity to test presence of Geocoder, calling Geocoder.isPresent() always returns false.

Class:

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 ALSO has following entries before "application" element:

<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

Environment : Eclipse Indigo 3.7.1, ICS 4.0 emulator on XP Professional 2002 SP 3

Please help me understand:
1. Why Geocoder.isPresent() is always returing false?
2. What changes to make so that Geocoder.isPresent() returns true?

Thanks much in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

帅哥哥的热头脑 2025-01-05 17:01:52

实际上 Geocoder 需要框架在后台运行的服务。

从文档中:

如果没有,地理编码器查询方法将返回一个空列表
平台后台服务。使用 isPresent() 方法
确定是否存在 Geocoder 实现。

因此,如果我们查看 isPresent() 的文档,它指出。

如果 Geocoder 方法 getFromLocation 和,则返回 true
getFromLocationName 已实现。缺乏网络连接可能
仍然会导致这些方法返回 null 或空列表。

注意:请记住,isPresent() 在 Pre-Api 9 平台中不可用。

Actually the Geocoder need a Service running in the background by the framework.

From the documentation:

The Geocoder query methods will return an empty list if there no
backend service in the platform. Use the isPresent() method to
determine whether a Geocoder implementation exists.

so if we look at the documentation of isPresent(), it states.

Returns true if the Geocoder methods getFromLocation and
getFromLocationName are implemented. Lack of network connectivity may
still cause these methods to return null or empty lists.

Note: keep in mind that isPresent() is not available in Pre-Api 9 plateforms.

吃颗糖壮壮胆 2025-01-05 17:01:52

使用AsyncTask使用geocoder从服务器获取坐标。例如,应使用 AsyncTask 调用 getFromLocationName()。 UI线程(主活动)不允许执行花费太多时间的任务,因此该方法返回空列表。

Use AsyncTask to fetch coordinates from server using geocoder. For example, getFromLocationName() should be called using AsyncTask. UI thread (main activity) does not allow the tasks which take too much time, hence the method returns empty list.

多像笑话 2025-01-05 17:01:52

在模拟器或设备中测试此代码?当我在 2.2 模拟器上使用 GeoCoder 时,我遇到了同样的问题。但代码在 2.1 模拟器上运行良好。尝试使用 2.1

并且代码必须在设备上正常运行。

Testing this code in Emulator or device ? I have faced same problem when I was using GeoCoder on 2.2 emulator. But code works fine on 2.1 emulator. Try to use 2.1

And code must be running fine on device.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文