package pantao.com.jindouyun.activity; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.Editable; import android.text.TextWatcher; import android.view.View; import android.widget.AdapterView; import android.widget.EditText; import android.widget.ImageView; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; import android.widget.Toast; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.location.Poi; import com.baidu.mapapi.SDKInitializer; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.MapStatus; import com.baidu.mapapi.map.MapStatusUpdate; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.MyLocationData; import com.baidu.mapapi.model.LatLng; import com.baidu.mapapi.search.core.SearchResult; import com.baidu.mapapi.search.geocode.GeoCodeResult; import com.baidu.mapapi.search.geocode.GeoCoder; import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener; import com.baidu.mapapi.search.geocode.ReverseGeoCodeOption; import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult; import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener; import com.baidu.mapapi.search.poi.PoiCitySearchOption; import com.baidu.mapapi.search.poi.PoiDetailResult; import com.baidu.mapapi.search.poi.PoiResult; import com.baidu.mapapi.search.poi.PoiSearch; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import pantao.com.jindouyun.R; import pantao.com.jindouyun.utils.Site; /** * Created by KingJ on 2015/11/19. * 百度定位 */ public class AtlasActivity extends BaseActivity { public MapView mapView = null; public BaiduMap baiduMap = null; Myhandle myhandle; private double latitude; private double lontitude; private PoiSearch mPoiSearch; String adder; ArrayList<HashMap<String, Object>> list = new ArrayList<>(); ArrayList<HashMap<String, Object>> list_item = new ArrayList<>(); ImageView imageView; ListView listView, listView2; private EditText editText; private PoiCitySearchOption poiCitySearchOption; private String City; private ImageView fanahui; // 定位相关声明 public LocationClient locationClient = null; boolean isFirstLoc = true;// 是否首次定位 public BDLocationListener myListener = new BDLocationListener() { @Override public void onReceiveLocation(BDLocation location) { if (location == null || mapView == null) return; MyLocationData locData = new MyLocationData.Builder() .accuracy(location.getRadius()) .direction(10).latitude(location.getLatitude()) .longitude(location.getLongitude()).build(); baiduMap.setMyLocationData(locData); //设置定位数据 imageView.setVisibility(View.VISIBLE); myhandle = new Myhandle(); if (isFirstLoc) { isFirstLoc = false; isFirstLoc = false; LatLng ll = new LatLng(location.getLatitude(), location.getLongitude()); MapStatusUpdate u = MapStatusUpdateFactory.newLatLngZoom(ll, 19); //设置地图中心点以及缩放级别 baiduMap.animateMapStatus(u); } StringBuffer sb = new StringBuffer(256); sb.append("time : "); sb.append(location.getTime()); sb.append("\nerror code : "); sb.append(location.getLocType()); sb.append("\nlatitude : "); sb.append(location.getLatitude()); City = location.getCity(); sb.append("\nlontitude : "); sb.append(location.getLongitude()); sb.append("\nradius : "); sb.append(location.getRadius()); if (location.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位结果 sb.append("\nspeed : "); sb.append(location.getSpeed());// 单位:公里每小时 sb.append("\nsatellite : "); sb.append(location.getSatelliteNumber()); sb.append("\nheight : "); sb.append(location.getAltitude());// 单位:米 sb.append("\ndirection : "); sb.append(location.getDirection());// 单位度 sb.append("\naddr : "); sb.append(location.getAddrStr()); sb.append("\ndescribe : "); sb.append("gps定位成功"); sb.append(location.getAddrStr());//获得当前地址 adder = location.getAddrStr(); sb.append(location.getDirection());//获得方位 } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 网络定位结果 adder = location.getAddrStr(); sb.append("\naddr : "); sb.append(location.getAddrStr());//获得当前地址 //运营商信息 sb.append("\noperationers : "); sb.append(location.getOperators()); sb.append("\ndescribe : "); sb.append("网络定位成功"); } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果 sb.append("\ndescribe : "); sb.append("离线定位成功,离线定位结果也是有效的"); } else if (location.getLocType() == BDLocation.TypeServerError) { sb.append("\ndescribe : "); sb.append("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因"); } else if (location.getLocType() == BDLocation.TypeNetWorkException) { sb.append("\ndescribe : "); sb.append("网络不同导致定位失败,请检查网络是否通畅"); } else if (location.getLocType() == BDLocation.TypeCriteriaException) { sb.append("\ndescribe : "); sb.append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机"); } sb.append("\nlocationdescribe : "); /* logMsg(sb.toString());*/ sb.append(location.getLocationDescribe());// 位置语义化信息 List<Poi> list = location.getPoiList();// POI数据 if (list != null) { sb.append("\npoilist size = : "); sb.append(list.size()); for (Poi p : list) { sb.append("\npoi= : "); sb.append(p.getId() + " " + p.getName() + " " + p.getRank()); } } System.out.println(sb.toString()); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.baidumap_layout); PackageManager pkm = getPackageManager(); boolean has_permission = (PackageManager.PERMISSION_GRANTED == pkm.checkPermission("android.permission.ACCESS_FINE_LOCATION", "pantao.com.jindouyun")); if (!has_permission) { showToastMessage("你的定位服务关闭了,请检查你的定位权限"); } else { mapView = (MapView) findViewById(R.id.baidu_map); imageView = (ImageView) findViewById(R.id.imageView3); listView = (ListView) findViewById(R.id.listview); listView2 = (ListView) findViewById(R.id.listview_item); mPoiSearch = PoiSearch.newInstance(); baiduMap = mapView.getMap(); Monitor(); //开启定位图层 baiduMap.setMyLocationEnabled(true); editText = (EditText) findViewById(R.id.editText); locationClient = new LocationClient(getApplicationContext()); // 实例化LocationClient类 locationClient.registerLocationListener(myListener); // 注册监听函数 this.setLocationOption(); //设置定位参数 locationClient.start(); // 开始定位 SimpleAdapter simpleAdapter = new SimpleAdapter(AtlasActivity.this, list, R.layout.baidulist_item, new String[]{"1", "2"}, new int[]{R.id.textvie_item, R.id.text_view_item}); listView.setAdapter(simpleAdapter); SimpleAdapter simpleAdapter_item = new SimpleAdapter(AtlasActivity.this, list_item, R.layout.baidu_list_item, new String[]{"item", "item_hao"}, new int[]{R.id.text_item, R.id.haoma}); listView2.setAdapter(simpleAdapter_item); editText.setText(adder); editText.addTextChangedListener(textWatcher); fanahui = (ImageView) findViewById(R.id.birth_button); fanahui.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); BaiduMap.OnMapStatusChangeListener listener = new BaiduMap.OnMapStatusChangeListener() { /** * 手势操作地图,设置地图状态等操作导致地图状态开始改变。 * @param status 地图状态改变开始时的地图状态 */ public void onMapStatusChangeStart(MapStatus status) { imageView.setVisibility(View.VISIBLE); } /** * 地图状态变化中 * @param status 当前地图状态 */ public void onMapStatusChange(MapStatus status) { } /** * 地图状态改变结束 * @param status 地图状态改变结束后的地图状态 */ public void onMapStatusChangeFinish(MapStatus status) { LatLng ll = status.target; latitude = ll.latitude; lontitude = ll.longitude; ss(); } }; baiduMap.setOnMapStatusChangeListener(listener); } } @Override protected void onStart() { super.onStart(); System.out.println(latitude + "fd" + lontitude); } // 三个状态实现地图生命周期管理 @Override protected void onDestroy() { //退出时销毁定位 locationClient.stop(); baiduMap.setMyLocationEnabled(false); super.onDestroy(); mapView.onDestroy(); mapView = null; } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); mapView.onResume(); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); mapView.onPause(); } /** * 设置定位参数 */ private void setLocationOption() { LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); // 打开GPS option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);// 设置定位模式 option.setCoorType("bd09ll"); // 返回的定位结果是百度经纬度,默认值gcj02 option.setScanSpan(5000); // 设置发起定位请求的间隔时间为5000ms option.setIsNeedAddress(true); // 返回的定位结果包含地址信息 option.setNeedDeviceDirect(true); // 返回的定位结果包含手机机头的方向 locationClient.setLocOption(option); } @Override public void onResponse(Message msg) { super.onResponse(msg); String json = (String) msg.obj; System.out.println(json); } OnGetPoiSearchResultListener poiListener = new OnGetPoiSearchResultListener() { public void onGetPoiResult(PoiResult result) { if (result.getAllPoi() != null) { list.clear(); for (int i = 0; i < result.getAllPoi().size(); i++) { HashMap<String, Object> map = new HashMap<String, Object>(); map.put("1", result.getAllPoi().get(i).name); map.put("2", result.getAllPoi().get(i).address); System.out.println(result.getAllPoi().get(i).name); list.add(map); } Message message = new Message(); message.what = 1; message.obj = list; myhandle.sendMessage(message); } else { Toast.makeText(AtlasActivity.this, "你搜索的地方没找到", Toast.LENGTH_LONG).show(); } } public void onGetPoiDetailResult(PoiDetailResult result) { //获取Place详情页检索结果 } }; private TextWatcher textWatcher = new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { String s1 = editText.getText().toString(); String s2 = "1"; if (s2.equals(s1)) { } else { if (!s1.equals("")) { poiCitySearchOption = new PoiCitySearchOption() .city(City) .keyword(editText.getText().toString()); mPoiSearch.searchInCity(poiCitySearchOption); mPoiSearch.setOnGetPoiSearchResultListener(poiListener); listView.setVisibility(View.VISIBLE); System.out.println(City); mapView.setVisibility(View.GONE); listView2.setVisibility(View.GONE); imageView.setVisibility(View.GONE); } if (s1.equals("")) { imageView.setVisibility(View.VISIBLE); mapView.setVisibility(View.VISIBLE); listView.setVisibility(View.GONE); } } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // System.out.println("-2-beforeTextChanged-->" + editText.getText().toString() + "<--"); } @Override public void afterTextChanged(Editable s) { // System.out.println("-3-afterTextChanged-->" + editText.getText().toString() + "<--"); } }; private void ss() { GeoCoder geoCoder = GeoCoder.newInstance(); // OnGetGeoCoderResultListener listener = new OnGetGeoCoderResultListener() { // 反地理编码查询结果回调函数 @Override public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) { System.out.println(result.getPoiList().size()); for (int i = 0; i < result.getPoiList().size(); i++) { System.out.println(result.getPoiList().get(i).name); } if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { // 没有检测到结果 Toast.makeText(AtlasActivity.this, "抱歉,未能找到结果", Toast.LENGTH_LONG).show(); } listView2.setVisibility(View.VISIBLE); list_item.clear(); for (int i = 0; i < result.getPoiList().size(); i++) { HashMap<String, Object> map = new HashMap<String, Object>(); map.put("item", result.getPoiList().get(i).name); map.put("item_hao", result.getPoiList().get(i).address); list_item.add(map); } Message message = new Message(); message.what = 2; message.obj = list_item; myhandle.sendMessage(message); Toast.makeText(AtlasActivity.this, "位置:" + result.getAddress(), Toast.LENGTH_LONG) .show(); } // 地理编码查询结果回调函数 @Override public void onGetGeoCodeResult(GeoCodeResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { // 没有检测到结果 } } }; // 设置地理编码检索监听者 geoCoder.setOnGetGeoCodeResultListener(listener); // LatLng latLng = new LatLng(latitude, lontitude); geoCoder.reverseGeoCode(new ReverseGeoCodeOption().location(latLng)); // 释放地理编码检索实例 // geoCoder.destroy(); } class Myhandle extends Handler { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 1: list = (ArrayList<HashMap<String, Object>>) msg.obj; break; case 2: list_item = (ArrayList<HashMap<String, Object>>) msg.obj; break; } } } private void Monitor() { final Intent intent = new Intent(); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { TextView textView = (TextView) view.findViewById(R.id.textvie_item); TextView tdizhihao = (TextView) view.findViewById(R.id.text_view_item); String dizhi = textView.getText().toString(); Intent intent = new Intent(AtlasActivity.this, AmendActivity.class); intent.putExtra("dizhi", dizhi); intent.putExtra("hao", tdizhihao.getText().toString()); Site.sitelis.removeAll(Site.sitelis); Site.sitelis.add(dizhi); Site.sitelis.add(tdizhihao.getText().toString()); setResult(2, intent); } }); listView2.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { TextView textView = (TextView) view.findViewById(R.id.text_item); TextView hao = (TextView) view.findViewById(R.id.haoma); String dizhi = textView.getText().toString(); intent.setClass(AtlasActivity.this, AmendActivity.class); Site.sitelis.removeAll(Site.sitelis); Site.sitelis.add(dizhi); Site.sitelis.add(hao.getText().toString()); intent.putExtra("dizhi", dizhi); intent.putExtra("hao", hao.getText().toString()); setResult(2, intent); onBackPressed(); } }); } }
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#fff" android:orientation="vertical"> <RelativeLayout android:id="@+id/relativeLayout" android:layout_width="match_parent" android:layout_height="54dp" android:background="@color/main_color"> <ImageView android:id="@+id/birth_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_centerVertical="true" android:layout_marginBottom="10dp" android:padding="10dp" android:src="@mipmap/login_back" /> <pantao.com.jindouyun.ui.ClearEditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="20dp" android:layout_marginRight="40dp" android:layout_toRightOf="@id/birth_button" android:background="@drawable/round_rect_baidu_search_bg" android:gravity="center" android:hint="请输入地址" android:padding="5dp" android:textColor="#97999C" android:textSize="12sp" /> </RelativeLayout> <com.baidu.mapapi.map.MapView android:id="@+id/baidu_map" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_below="@+id/relativeLayout" android:clickable="true"></com.baidu.mapapi.map.MapView> <ImageView android:id="@+id/imageView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:background="@mipmap/ds" android:visibility="gone" /> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/relativeLayout" android:visibility="gone"></ListView> <ListView android:id="@+id/listview_item" android:layout_width="match_parent" android:layout_height="200dp" android:layout_alignParentBottom="true" android:visibility="gone"></ListView> </RelativeLayout>