【发布时间】:2012-01-31 06:39:09
【问题描述】:
我写了一个简单的 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 需要做哪些更改?
非常感谢!
【问题讨论】:
-
我什至尝试在我的模拟器中将“Google API”作为目标,但是没有用。
-
我也尝试在构建路径中包含 maps.jar (
\android-sdk\add-ons\addon-google_apis-google_inc_-14\libs),但没有用。 -
我可以澄清一下。地理编码器“后端”是否存在仍然只取决于用户的设备对吗?也就是说,即使我们针对包含外部地图库的“Google API 插件”进行构建,也不意味着我们的应用程序在发布到市场时会包含“后端”,对吗?所以即使Google APIs addon包含了“后端服务实现”,也不能保证最终用户的设备会?
-
应用程序 (.apk) 永远不会隐式包含 Geocoder 后端服务实现。不过,您可以明确选择这样做。这就像编写一个 JDBC 类(应用程序的一部分)并部署在不同的环境中。环境必须提供 JDBC 实现,或者您可以选择在应用程序中捆绑 JDBC 实现/jar 文件。因此,即使环境不提供实现,如果您在应用程序中捆绑了 JDBC 实现/jar 文件,您的应用程序仍然可以访问数据库。
-
我的荣幸。虽然电话正在拨打网络电话,但实际上它是利用网络信号而不是互联网连接。不幸的是,那里的许多示例在 Geocoder 示例中使用 INTERNET 权限。当我的代码不起作用时,我搜索并盲目地遵循示例。后来,当我发现解决方案时,我意识到不需要 INTERNET 权限,正如documentation 明确指出的那样。希望这会有所帮助...