该应用程序使用Geocoder对象.它在我的股票Froyo Nexus One上运行良好.但后来我在不同的设备上运行完全相同的应用程序(Advent Vega 10"平板电脑也运行Froyo),我得到了这个例外:服务不可用.我正在使用的方法是getFromLocationName(),我正在建立对抗Android 1.6 Google API.
我知道在模拟器上抛出此异常的问题,但我怀疑这是不同的.为什么会在运行Froyo的设备上抛出它而不是另一台设备呢?
该应用程序是一个位置应用程序,由于平板电脑没有GPS或移动网络,在Wi-Fi连接不提供位置的情况下,用户必须手动指定它,因此无法使用Geocoder对象是坏消息.
我可以为用户添加一种在地图上选择位置的方法,但这并不理想.可能我可以直接使用谷歌地图API,但我希望首先了解问题的本质,因为有一个更简单的解决方案会很好.
希望在未来版本中,Android将包含非Geocoder设备的操作系统级"默认位置",因此位置感知应用程序可在Google TV等设备上开箱即用.
我想在Android应用程序中使用Geocoder,我有以下代码来对其进行采样:
public class LocatorGeo extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Geocoder geo = new Geocoder(getApplicationContext());
List<Address> myAddrs = new ArrayList<Address>();
try {
myAddrs = geo.getFromLocationName("CO100AR", 1);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到以下堆栈跟踪:
09-01 15:52:38.809: WARN/System.err(334): java.io.IOException: Service not Available
09-01 15:52:38.819: WARN/System.err(334): at android.location.Geocoder.getFromLocationName(Geocoder.java:159)
09-01 15:52:38.829: WARN/System.err(334): at com.jameselsey.LocatorGeo.onCreate(LocatorGeo.java:25)
09-01 15:52:38.829: WARN/System.err(334): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-01 15:52:38.839: WARN/System.err(334): …Run Code Online (Sandbox Code Playgroud)