- 浏览: 27557 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (26)
- java排序 (1)
- android进程 (1)
- android音乐播放 (1)
- android 相机 (1)
- android phonegap (0)
- android surfaceView (1)
- android dialog (2)
- android 下拉列表 (1)
- android TextView (1)
- android 自定义列表 (1)
- android json (2)
- android readXml (1)
- android 抽屉菜单 (1)
- android sensor传感器 (1)
- android aidl通信 (2)
- android sqlite数据库 (1)
- android wifi打开 (1)
- android HttpClient (1)
- android 滚动显示图片 (0)
- android 多线程 (1)
- android 百度地图 (1)
- android xListView分页 (1)
- android BlueTooth蓝牙 (1)
- Activity的四种加载模式 (1)
- android intent (1)
最新评论
MainActivity.java
activity_main.xml
strings.xml
AndroidManifest.xml
package com.example.bdmap; import java.text.DecimalFormat; import java.util.HashMap; import java.util.Map; import android.app.Activity; import android.graphics.Color; import android.graphics.Point; import android.os.Bundle; import android.view.KeyEvent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; 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.mapapi.SDKInitializer; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.BaiduMap.OnMapStatusChangeListener; import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener; import com.baidu.mapapi.map.BitmapDescriptor; import com.baidu.mapapi.map.BitmapDescriptorFactory; import com.baidu.mapapi.map.InfoWindow.OnInfoWindowClickListener; import com.baidu.mapapi.map.InfoWindow; 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.Marker; import com.baidu.mapapi.map.MarkerOptions; import com.baidu.mapapi.map.MyLocationConfigeration.LocationMode; import com.baidu.mapapi.map.MyLocationData; import com.baidu.mapapi.map.OverlayOptions; 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.utils.DistanceUtil; public class MainActivity extends Activity implements OnGetGeoCoderResultListener { public MapView mapView; public BaiduMap mBaiduMap; public LocationMode mLocationMode; public BitmapDescriptor mBitmapDescriptor; public LocationClient mLocationClient; public MyLocationListenner myLocationListener = new MyLocationListenner(); boolean isFirst = true; boolean isFirsts = true; public Marker marker=null; public Marker markers=null; public GeoCoder geoCoder=null; private InfoWindow mInfoWindow=null; Map<Marker, ReverseGeoCodeResult> hashMapMarker = new HashMap<Marker, ReverseGeoCodeResult>(); public Button positioning; public LatLng MarkerLatLng=null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // SDKInitializer必须在控件加载前初始化 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); initGeoCoder(); initView(); } // 初始化geoCoder private void initGeoCoder() { // TODO Auto-generated method stub geoCoder = GeoCoder.newInstance(); geoCoder.setOnGetGeoCodeResultListener(this); } private void initView() { // TODO Auto-generated method stub mapView = (MapView) findViewById(R.id.mapView); mBaiduMap = mapView.getMap(); // mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); // 设置定位按钮点击事件 positioning = (Button) findViewById(R.id.positioning); positioning.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (marker!= null) { MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory .newLatLng(MarkerLatLng); // 设置动画 mBaiduMap.animateMapStatus(mapStatusUpdate); } } }); // 开启定位图层 mBaiduMap.setMyLocationEnabled(true); mLocationClient = new LocationClient(this); // 通过继承BDLocationListener获取当前位置 mLocationClient.registerLocationListener(myLocationListener); LocationClientOption LocationClientOption = new LocationClientOption(); // 打开gps LocationClientOption.setOpenGps(true); // 设置坐标类型 LocationClientOption.setCoorType("bd09ll"); // 设置更新时间 LocationClientOption.setScanSpan(2000); mLocationClient.setLocOption(LocationClientOption); mLocationClient.start(); // 移动或改变地图状态时清屏 mBaiduMap.setOnMapStatusChangeListener(new OnMapStatusChangeListener() { @Override public void onMapStatusChangeStart(MapStatus arg0) { // TODO Auto-generated method stub mBaiduMap.hideInfoWindow(); } @Override public void onMapStatusChangeFinish(MapStatus arg0) { // TODO Auto-generated method stub mBaiduMap.hideInfoWindow(); } @Override public void onMapStatusChange(MapStatus arg0) { // TODO Auto-generated method stub mBaiduMap.hideInfoWindow(); } }); // 地图图标点击事件 mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker markert) { // TODO Auto-generated method stubMap<Marker, // ReverseGeoCodeResult> Button button = new Button(getApplicationContext()); button.setBackgroundResource(R.drawable.popup); LatLng latLng = null; OnInfoWindowClickListener listener = null; for (Map.Entry<Marker, ReverseGeoCodeResult> m : hashMapMarker .entrySet()) { if (markert == m.getKey()) { button.setText(m.getValue().getAddress()); button.setTextColor(Color.BLACK); if (marker == m.getKey()) { latLng = marker.getPosition(); } else { latLng = markers.getPosition(); } listener = new OnInfoWindowClickListener() { public void onInfoWindowClick() { mBaiduMap.hideInfoWindow(); } }; } } Point point = mBaiduMap.getProjection() .toScreenLocation(latLng); point.y -= 50; LatLng latLngp = mBaiduMap.getProjection().fromScreenLocation( point); mInfoWindow = new InfoWindow(button, latLngp, listener); mBaiduMap.showInfoWindow(mInfoWindow); return true; } }); } public class MyLocationListenner implements BDLocationListener { @Override public void onReceiveLocation(final BDLocation location) { if (location == null || mapView == null) return; // 获取当前经纬度并保持到MyLocationData中 MyLocationData locationData = new MyLocationData.Builder() .accuracy(location.getRadius()).direction(0) .latitude(location.getLatitude()) .longitude(location.getLongitude()).build(); // 显示默认图标 // mBaiduMap.setMyLocationData(locationData); // 更新图标位置 if (marker==null&&isFirst) { LatLng point = new LatLng(locationData.latitude, locationData.longitude); MarkerLatLng=point; geoCoder.reverseGeoCode(new ReverseGeoCodeOption() .location(point)); } else { LatLng point = new LatLng(locationData.latitude, locationData.longitude); MarkerLatLng=point; geoCoder.reverseGeoCode(new ReverseGeoCodeOption() .location(point)); trun=false; } } public void onReceivePoi(BDLocation poiLocation) { } } // 设置反Geo和距离按钮点击事件 public void buttonListener(View view) { if (view.getId() == R.id.geoCoderF) { EditText latitude = (EditText) findViewById(R.id.latitude); EditText longitude = (EditText) findViewById(R.id.longitude); if (!latitude.equals("") && !longitude.equals("")) { try { if(!isFirst){ trun=true; LatLng latLng = new LatLng((Float.valueOf(latitude .getText().toString())), (Float.valueOf(longitude .getText().toString()))); geoCoder.reverseGeoCode(new ReverseGeoCodeOption() .location(latLng)); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); Toast.makeText(MainActivity.this, "输入坐标不正确", Toast.LENGTH_SHORT).show(); } } } if (view.getId() == R.id.distance) { if (hashMapMarker.size() > 1) { LatLng latLng = hashMapMarker.get(marker).getLocation(); LatLng latLngs = hashMapMarker.get(markers).getLocation(); double distances = DistanceUtil.getDistance(latLng, latLngs) / 1000; DecimalFormat decimalFormat = new DecimalFormat("#.00"); TextView textDistance = (TextView) findViewById(R.id.distanceTextView); textDistance.setText("~" + decimalFormat.format(distances) + "公里"); Toast.makeText(MainActivity.this, "~" + decimalFormat.format(distances) + "公里", Toast.LENGTH_LONG).show(); } else { Toast.makeText(MainActivity.this, "选择点", Toast.LENGTH_SHORT) .show(); } } } // 根据地理位置获取经纬度 @Override public void onGetGeoCodeResult(GeoCodeResult result) { // TODO Auto-generated method stub if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(MainActivity.this, "未能找到结果", Toast.LENGTH_SHORT) .show(); } } // 根据经纬度获取地理位置 public boolean trun=false; @Override public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) { // TODO Auto-generated method stub if (result.getAddress().equals("") || result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { //尝试打开GPS及网络 if(trun) { Toast.makeText(MainActivity.this, "未能找到该位置信息",Toast.LENGTH_SHORT).show(); } } else { BitmapDescriptor bitmap; OverlayOptions option; if (isFirst) { isFirst = false; bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon); option = new MarkerOptions().position(result.getLocation()) .icon(bitmap); marker = (Marker) mBaiduMap.addOverlay(option); hashMapMarker.put(marker, result); LatLng latLng = new LatLng(result.getLocation().latitude, result.getLocation().longitude); MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory .newLatLng(latLng); mBaiduMap.animateMapStatus(mapStatusUpdate); Toast.makeText(MainActivity.this, result.getAddress(), Toast.LENGTH_SHORT).show(); } else { if(trun){ if (isFirsts) { isFirsts = false; bitmap = BitmapDescriptorFactory .fromResource(R.drawable.icon_marka); option = new MarkerOptions().position(result.getLocation()) .icon(bitmap); markers = (Marker) mBaiduMap.addOverlay(option); hashMapMarker.put(markers, result); }else { LatLng latLng = new LatLng(result.getLocation().latitude, result.getLocation().longitude); markers.setPosition(latLng); hashMapMarker.put(markers, result); } LatLng latLng = new LatLng(result.getLocation().latitude, result.getLocation().longitude); MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory .newLatLng(latLng); mBaiduMap.animateMapStatus(mapStatusUpdate); Toast.makeText(MainActivity.this, result.getAddress(), Toast.LENGTH_SHORT).show(); }else { MarkerLatLng = new LatLng(result.getLocation().latitude, result.getLocation().longitude); marker.setPosition(MarkerLatLng); hashMapMarker.put(marker, result); } } } } @Override protected void onDestroy() { // TODO Auto-generated method stub mLocationClient.stop(); mBaiduMap.setMyLocationEnabled(false); mapView.onDestroy(); marker=null; markers=null; MarkerLatLng=null; mapView = null; super.onDestroy(); } @Override protected void onPause() { // TODO Auto-generated method stub mapView.onPause(); super.onPause(); } @Override protected void onResume() { // TODO Auto-generated method stub mapView.onResume(); super.onResume(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if(keyCode==KeyEvent.KEYCODE_BACK){ //1 this.finish(); //ActivityManager manager=(ActivityManager) getSystemService(ACTIVITY_SERVICE); //manager.killBackgroundProcesses("com.example.bdmap"); //manager.restartPackage("com.example.bdmap"); } return super.onKeyDown(keyCode, event); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="5" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/latitude" /> <EditText android:id="@+id/latitude" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="22.55" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/longitude" /> <EditText android:id="@+id/longitude" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="113.9" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/geoCoderF" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="buttonListener" android:text="@string/geoCoderF" /> <Button android:id="@+id/distance" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="buttonListener" android:text="@string/distance" /> <TextView android:id="@+id/distanceTextView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="20dip" android:layout_weight="1" android:onClick="buttonListener" /> </LinearLayout> </LinearLayout> <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" > <com.baidu.mapapi.map.MapView android:id="@+id/mapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" /> <Button android:id="@+id/positioning" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_marginBottom="50dip" android:background="@drawable/position"/> </RelativeLayout> </LinearLayout>
strings.xml
<resources> <string name="app_name">BDMap</string> <string name="hello_world">Hello world!</string> <string name="menu_settings">Settings</string> <string name="title_activity_main">MainActivity</string> <string name="geoCoderF">反Geo</string> <string name="geoCoder">Geo</string> <string name="latitude">经度</string> <string name="longitude">纬度</string> <string name="distance">距离</string> </resources>
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.bdmap" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="15" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" /> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /> <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" /> <permission android:name="android.permission.BAIDU_LOCATION_SERVICE" > </permission> <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" > </uses-permission> <uses-permission android:name="android.permission.INTERNET" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" > </uses-permission> <!-- <uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission> --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" > </uses-permission> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> <uses-permission android:name="android.permission.WAKE_LOCK" > </uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_GPS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.SEND_SMS" /> <!-- SDK1.5需要android.permission.GET_TASKS权限判断本程序是否为当前运行的应用? --> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.CAMERA" > </uses-permission> <uses-permission android:name="android.permission.RECORD_AUDIO" > </uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" > </uses-permission> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.BROADCAST_STICKY" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <!-- 来电消音 --> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" > </uses-permission> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="false" android:resizeable="true" android:smallScreens="true" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="juDScwrocHpeSN6bravN3VAV" /> <activity android:name=".MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 百度定位服务 --> <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" > </service> </application> </manifest>
- BDMap.rar (3.7 MB)
- 下载次数: 19
相关推荐
在Android平台上,百度地图API为开发者提供了一个强大的工具,用于集成地图功能到自己的应用程序中。这份"百度地图Android应用开发指南"文档详细介绍了如何利用百度地图SDK进行Android应用的开发,特别适合初学者...
在Android平台上进行Baidu_map(百度地图)的开发是一项常见的任务,这涉及到集成地图功能、定位服务、路线规划以及各种地图交互操作。本指南将详细阐述如何在Android应用中有效地利用百度地图API来实现这些功能。 ...
这个"Sign_android源码_百度地图_"项目可能包含了一个完整的Android应用程序,它利用百度地图服务来完成用户的签到操作。下面我们将详细探讨相关的技术知识点。 首先,我们要理解Android源码的基本结构。一个标准的...
**百度地图API_BaiduMap_AndroidSDK_v2.1.2**是百度为Android开发者提供的一款集成地图功能的开发工具包,它允许开发者在自己的应用中集成百度地图服务,包括定位、路线规划、地图渲染、地理编码、覆盖物显示等多种...
在Android应用开发中,使用地图服务是常见的需求之一,而百度地图SDK则为开发者提供了强大的地图功能支持。本文将详细讲解如何在Android项目中集成"BaiduLBS_AndroidSDK_Lib.zip",以及该压缩包中包含的重要组件和...
百度地图API是一套针对Android平台提供的应用程序接口,旨在帮助开发者轻松访问百度地图服务及相关数据,构建功能丰富且交互性强的地图应用。此API适用于Android 1.5及更高版本设备。 #### 二、基础知识 1. **集成...
为了让创建的地图Activity能够继承百度地图的API功能,开发者需要让Activity继承自com.baidu.mapapi.MapActivity,并导入相关的类。这个步骤对于让Activity具备地图展示和控制的能力是必要的。 在基础设置完成后,...
在Android应用开发中,集成百度地图SDK可以帮助我们构建丰富的地理位置服务功能。在“Android百度地图SDK v3.0.0 (四) 引入离线地图功能”这一主题中,我们将探讨如何在Android应用程序中利用百度地图SDK实现离线...
针对提供的文件信息,我们可以深入探讨一下“Baidu-MAP.zip_V2”中的关键知识点,这是一款基于百度地图V2.0的导航解决方案。 首先,我们要理解的是**百度地图API V2.0**。这是百度地图提供的一套接口,允许开发者在...
在Android开发中,集成百度地图并实现定位功能是一项常见的任务,尤其对于开发地理位置相关的应用来说至关重要。本篇文章将深入探讨如何在Android应用中整合百度地图API,并实现精准、高效的定位服务。 首先,我们...
2. **百度地图API**: 百度地图API是百度提供的一套用于开发地图相关应用的接口,支持JavaScript、Android、iOS以及WebService等多种平台。在这里,我们关注的是C#版本的API,它允许开发者在C#应用中嵌入地图展示、...
在Android开发中,百度地图API是一个非常常用的工具,它提供了丰富的地图展示、定位、路径规划等功能,极大地便利了开发者在构建地理位置相关应用时的工作。"老罗android 百度地图开发源码"是一个示例项目,它展示了...
《深入解析百度地图SDK 5.2.1:构建高效Android定位与地图应用》 在移动应用开发领域,地图服务已经成为不可或缺的一部分。百度地图SDK 5.2.1是百度为开发者提供的一款强大的Android平台地图服务工具,它集成了丰富...
百度地图API支持多种平台,包括Web端、Android和iOS移动平台等。 ### PERMISSION_UNFINISHED错误解析 #### 错误含义 “PERMISSION_UNFINISHED”错误提示意味着当前应用尚未完成权限申请流程,具体到百度地图API的...
包括BaiduMap_AndroidSDK_v3.1.0_Docs.zip、BaiduMap_AndroidSDK_v3.1.0_Lib.zip、BaiduMap_AndroidSDK_v3.1.0_Sample.zip
在Android应用开发中,集成百度地图能够为用户提供丰富的地理信息服务,包括定位、覆盖物显示、导航和路线规划等。下面将详细介绍如何在Android项目中整合百度地图SDK,并实现这些功能。 首先,集成百度地图SDK的...
要开始下载百度离线地图包,开发者需要拥有一个有效的百度地图API密钥。注册一个百度地图开发者账号后,可以在控制台获取这个密钥。有了密钥,就可以通过百度地图SDK提供的接口来下载所需的离线地图数据。 接下来,...