原地址:http://blog.csdn.net/u013210620/article/details/47701717
上一篇已经写了如何搭建高德地图的步骤,这里省略了,直接贴自己代码
*************************************定位的小蓝点***********************************************
先看配置文件
AndroidManifest.xml
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.example.homegode"
- android:versionCode="1"
- android:versionName="1.0" >
- <uses-sdk
- android:minSdkVersion="18"
- android:targetSdkVersion="18" />
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
- <uses-permission android:name="android.permission.READ_PHONE_STATE" />
- <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
- <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
- <uses-permission android:name="android.permission.WRITE_SETTINGS" />
- <application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme" >
- <meta-data
- android:name="com.amap.api.v2.apikey"
- android:value="86689cc69abe78e7104090f285eab15a" />
- <!-- 启动的activity不是固定的 -->
- <activity
- android:name=".MainActivity"
- android:label="@string/app_name" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
- </manifest>
- <RelativeLayout 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"
- tools:context="com.example.homegode.MainActivity" >
- <com.amap.api.maps.MapView
- android:id="@+id/main_mapView"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent" />
- </RelativeLayout>
MainActivity
- package com.example.homegode;
- import android.app.Activity;
- import android.graphics.Color;
- import android.location.Location;
- import android.os.Bundle;
- import com.amap.api.location.AMapLocation;
- import com.amap.api.location.AMapLocationListener;
- import com.amap.api.location.LocationManagerProxy;
- import com.amap.api.location.LocationProviderProxy;
- import com.amap.api.maps.AMap;
- import com.amap.api.maps.LocationSource;
- import com.amap.api.maps.MapView;
- import com.amap.api.maps.model.BitmapDescriptorFactory;
- import com.amap.api.maps.model.MyLocationStyle;
- /**
- * AMapV1地图中简单介绍显示定位小蓝点 思路是界面展现一个mapView, 加载那个蓝色图标,并且设置后边圆圈的属性,
- * 然后设置定位资源。如果不设置此定位资源则定位按钮不可点击。并且实现activate激活定位
- *
- * 之后mAMapLocationManager.requestLocationData(
- * LocationProviderProxy.AMapNetwork, 2000, 10, this);
- * 监听,并且在onLocationChanged这里实现回调方法
- */
- public class MainActivity extends Activity implements LocationSource,
- AMapLocationListener {
- private AMap aMap;
- private MapView mapView;
- private OnLocationChangedListener mListener;
- private LocationManagerProxy mAMapLocationManager;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- mapView = (MapView) findViewById(R.id.main_mapView);
- mapView.onCreate(savedInstanceState);// 此方法必须重写
- init();
- }
- /**
- * 初始化AMap对象
- */
- private void init() {
- if (aMap == null) {
- aMap = mapView.getMap();
- setUpMap();
- }
- }
- /**
- * 设置一些amap的属性
- */
- private void setUpMap() {
- // 自定义系统定位小蓝点
- MyLocationStyle myLocationStyle = new MyLocationStyle();
- myLocationStyle.myLocationIcon(BitmapDescriptorFactory
- .fromResource(R.drawable.location_marker));// 设置小蓝点的图标
- myLocationStyle.strokeColor(Color.BLACK);// 设置圆形的边框颜色
- myLocationStyle.radiusFillColor(Color.argb(100, 0, 0, 180));// 设置圆形的填充颜色
- myLocationStyle.strokeWidth(1.0f);// 设置圆形的边框粗细
- aMap.setMyLocationStyle(myLocationStyle);
- aMap.setLocationSource(this);// 设置定位资源。如果不设置此定位资源则定位按钮不可点击。并且实现activate激活定位,停止定位的回调方法
- aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示
- aMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false
- }
- /**
- * 定位成功后回调函数
- */
- @Override
- public void onLocationChanged(AMapLocation aLocation) {
- if (mListener != null && aLocation != null) {
- mListener.onLocationChanged(aLocation);// 显示系统小蓝点
- }
- }
- /**
- * 激活定位
- */
- @Override
- public void activate(OnLocationChangedListener listener) {
- mListener = listener;
- if (mAMapLocationManager == null) {
- mAMapLocationManager = LocationManagerProxy.getInstance(this);
- /*
- * mAMapLocManager.setGpsEnable(false);
- * 1.0.2版本新增方法,设置true表示混合定位中包含gps定位,false表示纯网络定位,默认是true Location
- * API定位采用GPS和网络混合定位方式
- * ,第一个参数是定位provider,第二个参数时间最短是2000毫秒,第三个参数距离间隔单位是米,第四个参数是定位监听者
- */
- mAMapLocationManager.requestLocationData(
- LocationProviderProxy.AMapNetwork, 2000, 10, this);
- }
- }
- /**
- * 停止定位
- */
- @Override
- public void deactivate() {
- mListener = null;
- if (mAMapLocationManager != null) {
- mAMapLocationManager.removeUpdates(this);
- mAMapLocationManager.destroy();
- }
- mAMapLocationManager = null;
- }
- /**
- * 方法必须重写
- */
- @Override
- protected void onResume() {
- super.onResume();
- mapView.onResume();
- }
- /**
- * 方法必须重写
- */
- @Override
- protected void onPause() {
- super.onPause();
- mapView.onPause();
- deactivate();
- }
- /**
- * 方法必须重写
- */
- @Override
- protected void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- mapView.onSaveInstanceState(outState);
- }
- /**
- * 方法必须重写
- */
- @Override
- protected void onDestroy() {
- super.onDestroy();
- mapView.onDestroy();
- }
- /**
- * 此方法已经废弃
- */
- @Override
- public void onLocationChanged(Location location) {
- }
- @Override
- public void onProviderDisabled(String provider) {
- }
- @Override
- public void onProviderEnabled(String provider) {
- }
- @Override
- public void onStatusChanged(String provider, int status, Bundle extras) {
- }
- }
- package com.example.homegode;
- import android.app.Activity;
- import android.os.Bundle;
- import com.amap.api.location.LocationManagerProxy;
- import com.amap.api.maps.AMap;
- import com.amap.api.maps.LocationSource.OnLocationChangedListener;
- import com.amap.api.maps.MapView;
- import com.amap.api.maps.model.BitmapDescriptorFactory;
- import com.amap.api.maps.model.LatLng;
- import com.amap.api.maps.model.Marker;
- import com.amap.api.maps.model.MarkerOptions;
- public class MainActivity extends Activity {
- private AMap aMap;
- private MapView mapView;
- private OnLocationChangedListener mListener;
- private LocationManagerProxy mAMapLocationManager;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- mapView = (MapView) findViewById(R.id.main_mapView);
- mapView.onCreate(savedInstanceState);// 此方法必须重写
- if (aMap == null) {
- aMap = mapView.getMap();
- }
- aMap.setTrafficEnabled(true);//开始实时交通
- aMap.setMapType(AMap.MAP_TYPE_NORMAL);//有普通,卫星,夜间模式
- MarkerOptions markerOptions = new MarkerOptions();
- //添加一个位置--经度,维度---marker对应一个markerOptions,用来设置marker的属性等
- markerOptions.position(new LatLng(39.90403, 116.407525));
- //添加图标
- markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.location_marker));;
- //添加marker
- Marker marker = aMap.addMarker(markerOptions);
- }
- /**
- * 方法必须重写
- */
- @Override
- protected void onResume() {
- super.onResume();
- mapView.onResume();
- }
- /**
- * 方法必须重写
- */
- @Override
- protected void onPause() {
- super.onPause();
- mapView.onPause();
- }
- /**
- * 方法必须重写
- */
- @Override
- protected void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- mapView.onSaveInstanceState(outState);
- }
- /**
- * 方法必须重写
- */
- @Override
- protected void onDestroy() {
- super.onDestroy();
- mapView.onDestroy();
- }
- }