android中google“定位查询”编辑

简介: <p>“定位查询”locate()方法,增加一个线程,在该线程中处理查询地点的功能,请参考代码清单16-10,完整代码请参考chapter16_7工程中src/com/work/map/MyMapActivity.java文件locate()方法代码部分。</p> <p>【代码清单16-1】 </p> <pre name="code" class="java">/** * 定位查询

“定位查询”locate()方法,增加一个线程,在该线程中处理查询地点的功能,请参考代码清单16-10,完整代码请参考chapter16_7工程中src/com/work/map/MyMapActivity.java文件locate()方法代码部分。

【代码清单16-1】 

/**

 * 定位查询

 */

private void locate() {

 

         LayoutInflater factory= LayoutInflater.from(MyMapActivity.this);

         View locationView =factory.inflate(R.layout.find_dialog, null);

         final EditTextfindText = (EditText) locationView

                           .findViewById(R.id.dailog_find);

         newAlertDialog.Builder(this).setTitle(R.string.dialog_find).setView(

                           locationView).setPositiveButton(R.string.button_ok,

                           newDialogInterface.OnClickListener() {

                                    public void onClick(DialogInterfacedialog, int whichButton) {

                                             findString= findText.getText().toString();

                                             progDialog =ProgressDialog.show(MyMapActivity.this,

                                                               "处理中...", "定位" +findString, true, false);

                                             new Thread() {

                                                      @Override

                                                      publicvoid run() {

                                                               try{

                                                                        Geocoder geocoder = new Geocoder(

                                                                                          MyMapActivity.this);

                                                                        addresses =geocoder.getFromLocationName(

                                                                                          findString, 1);

 

                                                                        if (addresses.size() > 0) {

                                                               List<OverlayItem>overlayitems = new ArrayList<OverlayItem>();

                                                                                 doublelat = addresses.get(0)

                                                                                                   .getLatitude();

                                                                                 doublelng = addresses.get(0)

                                                                                                   .getLongitude();

                                                                                 //设定中心点

                                                                                 centerPoit= new GeoPoint(

                                                                                                   (int)(lat * 1E6),

                                                                                                   (int)(lng * 1E6)); // 地理坐标

                                                                                 mc.setCenter(centerPoit);

                                                                                 Log.i(TAG," lat " + lat + "  lng"

                                                                                                   +lng);

                                                                                 intintMaxAddressLineIndex = addresses

                                                                                                   .get(0)

                                                                                                   .getMaxAddressLineIndex();

                                                                                 Stringaddress = "地址:";

                                                                                 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);

                                                                                 }

                                                                                 Stringtitle = "";

                                                                                 if(addresses.get(0).getFeatureName() == null) {

                                                                                          title = "";

                                                                                 }else {

                                                                                          title = addresses.get(0)

                                                                                                            .getFeatureName();

                                                                                 }

                                                                                 overlayitems.add(newOverlayItem(

                                                                                                   centerPoit,title, address));

 

                                                                                 Drawablemarker = 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,

                           newDialogInterface.OnClickListener() {

 

                                    public void onClick(DialogInterfacedialog, 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 voidhandleMessage(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开发案例驱动教程》第十六章
目录
相关文章
|
3小时前
|
IDE API 开发工具
Google I/O :Android Jetpack 最新变化(四)Compose
Google I/O :Android Jetpack 最新变化(四)Compose
116 0
|
3小时前
|
JSON IDE 测试技术
Google I/O :Android Jetpack 最新变化(二) Performance
Google I/O :Android Jetpack 最新变化(二) Performance
117 0
|
3小时前
|
SQL API Android开发
Google I/O :Android Jetpack 最新变化(一) Architecture
Google I/O :Android Jetpack 最新变化(一) Architecture
75 0
|
7月前
|
API 开发工具 Android开发
解决 Android App 上架 Google play后 ,签名变更,第三方sdk无法登录
解决 Android App 上架 Google play后 ,签名变更,第三方sdk无法登录
153 0
|
8月前
|
传感器 安全 Android开发
Google发布 Android 12 开发预览版
Google发布 Android 12 开发预览版
87 1
|
3小时前
|
Android开发
如何在Android真机上检测是否有Google Map add-on
如何在Android真机上检测是否有Google Map add-on
12 3
|
3小时前
|
Shell
android2.3.4没有google map的真机上增加google map(原创)
android2.3.4没有google map的真机上增加google map(原创)
14 4
|
3小时前
|
API Android开发
Google I/O :Android Jetpack 最新变化(三)UI
Google I/O :Android Jetpack 最新变化(三)UI
53 0
|
3小时前
|
JSON Java 定位技术
【Android App】GPS获取定位经纬度和根据经纬度获取详细地址讲解及实战(附源码和演示 超详细)
【Android App】GPS获取定位经纬度和根据经纬度获取详细地址讲解及实战(附源码和演示 超详细)
353 0
|
7月前
|
JavaScript Java 开发工具
Cocos Creator Android 平台接入 Google Firebase (Analytics功能)(二)
Cocos Creator Android 平台接入 Google Firebase (Analytics功能)
179 0