浏览 3147 次
锁定老帖子 主题:android中google“定位查询”
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-08-03
最后修改:2011-10-31
【代码清单16-10】 /** * 定位查询 */ private void locate() { LayoutInflater factory = LayoutInflater.from(MyMapActivity.this); View locationView = factory.inflate(R.layout.find_dialog, null); final EditText findText = (EditText) locationView .findViewById(R.id.dailog_find); new AlertDialog.Builder(this).setTitle(R.string.dialog_find).setView( locationView).setPositiveButton(R.string.button_ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { findString = findText.getText().toString(); progDialog = ProgressDialog.show(MyMapActivity.this, "处理中...", "定位" + findString, true, false); new Thread() { @Override public void run() { try { Geocoder geocoder = new Geocoder( MyMapActivity.this); addresses = geocoder.getFromLocationName( findString, 1); if (addresses.size() > 0) { List<OverlayItem> overlayitems = new ArrayList<OverlayItem>(); double lat = addresses.get(0) .getLatitude(); double lng = addresses.get(0) .getLongitude(); // 设定中心点 centerPoit = new GeoPoint( (int) (lat * 1E6), (int) (lng * 1E6)); // 地理坐标 mc.setCenter(centerPoit); Log.i(TAG, " lat " + lat + " lng " + lng); int intMaxAddressLineIndex = addresses .get(0) .getMaxAddressLineIndex(); String address = "地址:"; for (int j = 0; j <= intMaxAddressLineIndex; j++) { if (addresses.get(0) == null) continue; address += addresses.get(0) .getAddressLine(j) + ","; } if (address.endsWith(",")) { address = address.substring(0, address.length() - 1); } String title = ""; if (addresses.get(0).getFeatureName() == null) { title = ""; } else { title = addresses.get(0) .getFeatureName(); } overlayitems.add(new OverlayItem( centerPoit, title, address)); Drawable marker = getResources() .getDrawable( R.drawable.markermap2); locs = new LocationItemsOverlay(marker, overlayitems); handler.sendEmptyMessage(0); } else { handler.sendEmptyMessage(1); } } catch (Exception e) { e.printStackTrace(); handler.sendEmptyMessage(1); } } }.start(); } }).setNegativeButton(R.string.button_cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }).show(); } 通过下面的代码是实现显示进度条: progDialog = ProgressDialog.show(MyMapActivity.this, "处理中...", "定位" + findString, true, false); 启动一个子线程,在该线程中实现地点查询,但是不能有更新UI的处理,如果查询成功调用handler.sendEmptyMessage(0),如果失败调用handler.sendEmptyMessage(1)。 new Thread() { @Override public void run() { … … } }.start(); 在Hander的handleMessage方法中处理更新UI操作,其中成功(case 0)时候清除屏幕上原来的图层,重新添加图层,最后progDialog.dismiss()方法关闭进度条对话框。如果是查询失败(case 1)弹出Toast说明一下,也要通过progDialog.dismiss()方法关闭进度条对话框,否则进度条对话框不会关闭。 private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case 0: mapView.getOverlays().clear(); mapView.getOverlays().add(locs); progDialog.dismiss(); break; case 1: Toast.makeText(MyMapActivity.this, "暂时无法" + findString + "信息。", Toast.LENGTH_SHORT).show(); progDialog.dismiss(); } } }; 出自《Android开发案例驱动教程》第十六章 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-08-09
最后修改:2011-08-09
为什么不把代码格式一下呢,加点说明什么的,也好方便大家讨论
|
|
返回顶楼 | |
发表时间:2011-10-30
这是推荐书的。
|
|
返回顶楼 | |