Android学习之高德地图的通用功能开发步骤(一)

这次分享的心得是高德地图的开发,基本上都是按照高德官网上的API文档来进行开发,废话不多说,走起。

第一步:申请高德地图的一个key,有了这个key我们的高德地图才可以正确用起来。

至于怎么申请高德地图的key,其实很简单,这里我大概说一下步骤:打开网页http://lbs.amap.com,注册一个高德地图API的一个账号(这里我声明一下,并不是给高德打广告,我只是分享一下我的这次学习经历而已),注册成功之后,会提示你成为开发者,成为开发者之后就能获取一个key了,获取key需要填写的内容,可以在高德地图API官网上有,仔细阅读就好了,很简单的。

第二步:下载我们开发使用的包,具体需要下载哪些,可以查看配置工程里面,都有写,在相关下载那里下载这些包

把这些包都添加到我们自己新建的Android工程里面去,然后给我们的工程分配一些权限,以及填入自己的key

第三步:前期准备工作已经基本上完成了,接下来就是使用高德地图API能实现自己的地图,第一个功能就是实现显示地图

下面是我的ShowMapActivity的布局文件

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent" >
 5     
 6     <!-- 引入布局文件 -->
 7     <com.amap.api.maps.MapView
 8         xmlns:android="http://schemas.android.com/apk/res/android"
 9         android:id="@+id/map"
10         android:layout_width="match_parent"
11         android:layout_height="match_parent" />
12     
13 </RelativeLayout>
View Code

然后就是实现我的ShowMapActivity(基本上都是官方文档中的):

 1 package com.oysd.activity;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 
 6 import com.amap.api.maps.AMap;
 7 import com.amap.api.maps.MapView;
 8 import com.oysd.ouyangmap.R;
 9 import com.oysd.ouyangmap.R.id;
10 import com.oysd.ouyangmap.R.layout;
11 
12 public class ShowMapActivity extends Activity {
13     
14     private MapView mapView;
15     private AMap aMap;
16     
17     
18     @Override
19     protected void onCreate(Bundle savedInstanceState) {
20         // TODO Auto-generated method stub
21         super.onCreate(savedInstanceState);
22         setContentView(R.layout.activity_showmap);
23         mapView = (MapView) findViewById(R.id.map);
24         mapView.onCreate(savedInstanceState);//必须要写
25         init();
26     }
27     
28     /**
29      * 初始化AMap对象
30      */
31     private void init() {
32         if (aMap == null) {
33             aMap = mapView.getMap();
34         }
35     }
36  
37     /**
38      * 方法必须重写
39      */
40     @Override
41     protected void onResume() {
42         super.onResume();
43         mapView.onResume();
44     }
45  
46     /**
47      * 方法必须重写
48      */
49     @Override
50     protected void onPause() {
51         super.onPause();
52         mapView.onPause();
53     }
54      
55     /**
56      * 方法必须重写
57      */
58     @Override
59     protected void onSaveInstanceState(Bundle outState) {
60         super.onSaveInstanceState(outState);
61         mapView.onSaveInstanceState(outState);
62     }
63  
64     /**
65      * 方法必须重写
66      */
67     @Override
68     protected void onDestroy() {
69         super.onDestroy();
70         mapView.onDestroy();
71     }
72 
73 }
View Code

至于怎么样在手机上来显示这个activity我这里就不明说了,可以在首界面弄一个按钮,或者一个ListView,然后实现点击代码就ok了

第一个功能是非常简单的,仅仅就是实现了显示地图

第四步:实现定位功能

要实现定位功能的话,还得去高德地图API官网去下载定位需要用到的包,需要哪些包,还是在配置工程那里查看,都有写的,耐心看就好了。

包导进去之后,就可以写代码了,以下是我的LocationActivity的布局文件(和第一个功能的布局其实是一样的):

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent" >
 5     
 6     <!-- 引入布局文件 -->
 7     <com.amap.api.maps.MapView
 8         xmlns:android="http://schemas.android.com/apk/res/android"
 9         android:id="@+id/location"
10         android:layout_width="match_parent"
11         android:layout_height="match_parent" />
12     
13 
14 </RelativeLayout>
View Code

然后就是LocationActivity的实现代码(我也是参考官方文档写的):

  1 package com.oysd.activity;
  2 
  3 import android.app.Activity;
  4 import android.location.Location;
  5 import android.os.Bundle;
  6 import android.util.Log;
  7 
  8 import com.amap.api.location.AMapLocation;
  9 import com.amap.api.location.AMapLocationListener;
 10 import com.amap.api.location.LocationManagerProxy;
 11 import com.amap.api.location.LocationProviderProxy;
 12 import com.amap.api.maps.AMap;
 13 import com.amap.api.maps.LocationSource;
 14 import com.amap.api.maps.MapView;
 15 import com.amap.api.maps.LocationSource.OnLocationChangedListener;
 16 import com.oysd.ouyangmap.R;
 17 import com.oysd.ouyangmap.R.id;
 18 import com.oysd.ouyangmap.R.layout;
 19 
 20 public class LocationActivity extends Activity implements LocationSource, AMapLocationListener {
 21     
 22     private MapView mapView;
 23     private AMap aMap;
 24     private LocationManagerProxy mLocationManagerProxy;
 25     private OnLocationChangedListener mListener;
 26     
 27     private static final String TAG = "LocationActivity";
 28     
 29     @Override
 30     protected void onCreate(Bundle savedInstanceState) {
 31         // TODO Auto-generated method stub
 32         super.onCreate(savedInstanceState);
 33         setContentView(R.layout.activity_location);
 34         mapView = (MapView) findViewById(R.id.location);
 35         mapView.onCreate(savedInstanceState);
 36         init();
 37     }
 38     
 39     /**
 40      * 初始化AMap对象
 41      */
 42     private void init(){
 43         if(aMap == null ){
 44             aMap = mapView.getMap();
 45         }
 46         //initLocation();
 47         setUpMap();
 48     }
 49     
 50     
 51     /**
 52      * 初始化定位
 53      */
 54     private void initLocation(){
 55         
 56         mLocationManagerProxy = LocationManagerProxy.getInstance(this);
 57         //此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
 58         //注意设置合适的定位时间的间隔,并且在合适时间调用removeUpdates()方法来取消定位请求
 59         //在定位结束后,在合适的生命周期调用destroy()方法     
 60         //其中如果间隔时间为-1,则定位只定一次
 61         mLocationManagerProxy.requestLocationData(
 62                 LocationProviderProxy.AMapNetwork, -1, 15, this);
 63  
 64         mLocationManagerProxy.setGpsEnable(false);
 65     }
 66     
 67     private void setUpMap(){
 68         aMap.setLocationSource(this);// 设置定位监听
 69         aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示
 70         aMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false
 71         // 设置定位的类型为定位模式:定位(AMap.LOCATION_TYPE_LOCATE)、跟随(AMap.LOCATION_TYPE_MAP_FOLLOW)
 72         // 地图根据面向方向旋转(AMap.LOCATION_TYPE_MAP_ROTATE)三种模式
 73         aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);
 74         
 75     }
 76 
 77     /**
 78      * 激活定位
 79      */
 80     @Override
 81     public void activate(OnLocationChangedListener onLocationChangedListener) {
 82         // TODO Auto-generated method stub
 83         mListener = onLocationChangedListener;
 84         if (mLocationManagerProxy == null) {
 85                 mLocationManagerProxy = LocationManagerProxy.getInstance(this);
 86                 //此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
 87                 //注意设置合适的定位时间的间隔,并且在合适时间调用removeUpdates()方法来取消定位请求
 88                 //在定位结束后,在合适的生命周期调用destroy()方法
 89                 //其中如果间隔时间为-1,则定位只定一次
 90                 mLocationManagerProxy.requestLocationData(
 91                         LocationProviderProxy.AMapNetwork, -1, 10, this);
 92         }
 93     }
 94 
 95     
 96     /**
 97      * 停止定位
 98      */
 99     @Override
100     public void deactivate() {
101         // TODO Auto-generated method stub
102         mListener = null;
103         if (mLocationManagerProxy != null) {
104             mLocationManagerProxy.removeUpdates(this);
105             mLocationManagerProxy.destroy();
106         }
107         mLocationManagerProxy = null;
108     }
109 
110     @Override
111     public void onLocationChanged(Location location) {
112         // TODO Auto-generated method stub
113         
114     }
115 
116     @Override
117     public void onProviderDisabled(String provider) {
118         // TODO Auto-generated method stub
119         
120     }
121 
122     @Override
123     public void onProviderEnabled(String provider) {
124         // TODO Auto-generated method stub
125         
126     }
127 
128     @Override
129     public void onStatusChanged(String provider, int status, Bundle extras) {
130         // TODO Auto-generated method stub
131         
132     }
133 
134     @Override
135     public void onLocationChanged(AMapLocation aMapLocation) {
136         // TODO Auto-generated method stub
137         if(aMapLocation != null && aMapLocation.getAMapException().getErrorCode() == 0){
138             //获取位置信息
139             Double geoLat = aMapLocation.getLatitude();
140             Double geoLng = aMapLocation.getLongitude();  
141             Log.d(TAG, "Latitude = " + geoLat.doubleValue() + ", Longitude = " + geoLng.doubleValue());
142             
143             // 通过 AMapLocation.getExtras() 方法获取位置的描述信息,包括省、市、区以及街道信息,并以空格分隔。
144             String desc = "";
145             Bundle locBundle = aMapLocation.getExtras();
146             if (locBundle != null) {
147                     desc = locBundle.getString("desc");
148                     Log.d(TAG, "desc = " + desc);
149             }
150             mListener.onLocationChanged(aMapLocation);// 显示系统小蓝点
151         }
152     }
153     
154     /**
155      * 此方法需存在
156      */
157     @Override
158     protected void onResume() {
159         super.onResume();
160         mapView.onResume();
161     }
162  
163     /**
164      * 此方法需存在
165      */
166     @Override
167     protected void onPause() {
168         super.onPause();
169         mapView.onPause();
170         deactivate();
171     }
172  
173     /**
174      * 此方法需存在
175      */
176     @Override
177     protected void onDestroy() {
178         super.onDestroy();
179         mapView.onDestroy();
180     }
181  
182 }
View Code

这样的话,就实现了地图定位功能了

第五步:获取自己位置的天气信息

以下是我的WeatherActivity的布局文件(超简陋的,勿喷):

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent" >
 5     
 6 
 7     <TextView 
 8         android:layout_width="fill_parent"
 9         android:layout_height="fill_parent"
10         android:id="@+id/tv_weather"
11         android:textColor="@android:color/black"
12         android:textSize="28sp"/>
13     
14 </RelativeLayout>
View Code

然后是实现WeatherActivity的代码:

 1 package com.oysd.activity;
 2 
 3 import java.util.List;
 4 
 5 import android.app.Activity;
 6 import android.os.Bundle;
 7 import android.widget.TextView;
 8 import android.widget.Toast;
 9 
10 import com.amap.api.location.AMapLocalDayWeatherForecast;
11 import com.amap.api.location.AMapLocalWeatherForecast;
12 import com.amap.api.location.AMapLocalWeatherListener;
13 import com.amap.api.location.AMapLocalWeatherLive;
14 import com.amap.api.location.LocationManagerProxy;
15 import com.oysd.ouyangmap.R;
16 import com.oysd.ouyangmap.R.id;
17 import com.oysd.ouyangmap.R.layout;
18 
19 public class WeatherActivity extends Activity implements AMapLocalWeatherListener {
20     
21     private LocationManagerProxy mLocationManagerProxy;
22     private TextView tvWeather;
23     
24     @Override
25     protected void onCreate(Bundle savedInstanceState) {
26         // TODO Auto-generated method stub
27         super.onCreate(savedInstanceState);
28         setContentView(R.layout.activity_weather);
29         tvWeather = (TextView) findViewById(R.id.tv_weather);
30         init();
31     }
32     
33     private void init(){
34         mLocationManagerProxy = LocationManagerProxy.getInstance(this);
35         mLocationManagerProxy.requestWeatherUpdates(
36                     LocationManagerProxy.WEATHER_TYPE_FORECAST, this);
37     }
38 
39     @Override
40     public void onWeatherForecaseSearched(AMapLocalWeatherForecast aMapLocalWeatherForecast) {
41         // TODO Auto-generated method stub
42         if(aMapLocalWeatherForecast != null && aMapLocalWeatherForecast.getAMapException().getErrorCode() == 0){
43              
44             List<AMapLocalDayWeatherForecast> forcasts = aMapLocalWeatherForecast
45                     .getWeatherForecast();
46             for (int i = 0; i < forcasts.size(); i++) {
47                 AMapLocalDayWeatherForecast forcast = forcasts.get(i);
48                 switch (i) {
49                 //今天天气
50                 case 0:
51                                         //城市
52                     String city = forcast.getCity();
53                                         String today = "今天 ( "+ forcast.getDate() + " )";
54                     String todayWeather = forcast.getDayWeather() + "    "
55                             + forcast.getDayTemp() + "/" + forcast.getNightTemp()
56                             + "    " + forcast.getDayWindPower();
57                     tvWeather.setText("城市:" + city + ", " + today + ", 天气信息:" + todayWeather);
58                     break;
59                 //明天天气
60                 case 1:
61                      
62                     String tomorrow = "明天 ( "+ forcast.getDate() + " )";
63                     String tomorrowWeather = forcast.getDayWeather() + "    "
64                             + forcast.getDayTemp() + "/" + forcast.getNightTemp()
65                             + "    " + forcast.getDayWindPower();
66                     tvWeather.append("; " + tomorrow + ", 天气信息:" + tomorrowWeather);
67                     break;
68                 //后天天气
69                 case 2:
70                      
71                     String aftertomorrow = "后天( "+ forcast.getDate() + " )";
72                     String aftertomorrowWeather = forcast.getDayWeather() + "    "
73                             + forcast.getDayTemp() + "/" + forcast.getNightTemp()
74                             + "    " + forcast.getDayWindPower();
75                     tvWeather.append("; " + aftertomorrow + ", 天气信息:" + aftertomorrowWeather);
76                     break;
77                 }
78             }
79         }else{
80             // 获取天气预报失败
81             Toast.makeText(this,"获取天气预报失败:"+ aMapLocalWeatherForecast.getAMapException().getErrorMessage(), Toast.LENGTH_SHORT).show();
82         }
83         
84     }
85 
86     @Override
87     public void onWeatherLiveSearched(AMapLocalWeatherLive arg0) {
88         // TODO Auto-generated method stub
89         
90     }
91 
92 }
View Code

第六步:实现不同地图类型的显示、实时路况以及截图(矢量地图模式、卫星地图模式、夜景地图模式):

下面是我的MapTypeActivity的布局文件:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent" >
 5     
 6     <!-- 引入布局文件 -->
 7     <com.amap.api.maps.MapView
 8         android:id="@+id/map"
 9         android:layout_width="match_parent"
10         android:layout_height="match_parent" 
11         />
12     
13     <LinearLayout
14         android:layout_width="wrap_content"
15         android:layout_height="wrap_content"
16         android:layout_alignParentTop="true"
17         android:layout_alignParentLeft="true"
18         android:layout_marginLeft="11dp"
19         android:layout_marginTop="10dp"
20         android:orientation="vertical">
21  
22         <RadioGroup
23             android:id="@+id/map_type_rg"
24             android:layout_width="wrap_content"
25             android:layout_height="wrap_content"
26             android:orientation="horizontal">
27  
28             <RadioButton
29                 android:id="@+id/map_type_normal_rb"
30                 android:layout_width="wrap_content"
31                 android:layout_height="wrap_content"
32                 android:checked="true"
33                 android:text="Normal"/>
34  
35             <RadioButton
36                 android:id="@+id/map_type_satellite_rb"
37                 android:layout_width="wrap_content"
38                 android:layout_height="wrap_content"
39                 android:text="Satellite"/>
40  
41             <RadioButton
42                 android:id="@+id/map_type_night_rb"
43                 android:layout_width="wrap_content"
44                 android:layout_height="wrap_content"
45                 android:text="Night"/>
46  
47         </RadioGroup>
48         
49         <CheckBox
50             android:id="@+id/trafficCB"
51             android:layout_width="wrap_content"
52             android:layout_height="wrap_content"
53             android:text="显示实时路况"/>
54         
55         <Button
56             android:id="@+id/screenShotBtn"
57             android:layout_width="wrap_content"
58             android:layout_height="wrap_content"
59             android:text="截屏"
60             android:onClick="screenShot"/>
61  
62     </LinearLayout>
63     
64 
65 </RelativeLayout>
View Code

然后就是我的MapTypeActivity的实现代码:

  1 package com.oysd.activity;
  2 
  3 import java.io.FileNotFoundException;
  4 import java.io.FileOutputStream;
  5 import java.io.IOException;
  6 import java.text.SimpleDateFormat;
  7 import java.util.Date;
  8 
  9 import android.app.Activity;
 10 import android.graphics.Bitmap;
 11 import android.graphics.Color;
 12 import android.location.Location;
 13 import android.os.Bundle;
 14 import android.os.Environment;
 15 import android.view.View;
 16 import android.widget.Button;
 17 import android.widget.CheckBox;
 18 import android.widget.CompoundButton;
 19 import android.widget.RadioGroup;
 20 import android.widget.Toast;
 21 import android.widget.RadioGroup.OnCheckedChangeListener;
 22 
 23 import com.amap.api.location.AMapLocation;
 24 import com.amap.api.location.AMapLocationListener;
 25 import com.amap.api.location.LocationManagerProxy;
 26 import com.amap.api.location.LocationProviderProxy;
 27 import com.amap.api.maps.AMap;
 28 import com.amap.api.maps.LocationSource;
 29 import com.amap.api.maps.MapView;
 30 import com.amap.api.maps.AMap.OnMapScreenShotListener;
 31 import com.amap.api.maps.LocationSource.OnLocationChangedListener;
 32 import com.amap.api.maps.model.BitmapDescriptorFactory;
 33 import com.amap.api.maps.model.MyLocationStyle;
 34 import com.amap.api.navi.AMapNavi;
 35 import com.oysd.ouyangmap.R;
 36 import com.oysd.ouyangmap.R.drawable;
 37 import com.oysd.ouyangmap.R.id;
 38 import com.oysd.ouyangmap.R.layout;
 39 
 40 public class MapTypeActivity extends Activity implements LocationSource, AMapLocationListener, OnMapScreenShotListener {
 41     
 42     private static final String TAG = "MapTypeActivity";
 43     
 44     private MapView mMapView;
 45     private AMap aMap;
 46     private RadioGroup mAMapTypesRG;
 47     private CheckBox mTrafficCB;
 48     
 49     private OnLocationChangedListener mListener;
 50     private LocationManagerProxy mLocationManagerProxy;
 51     private Button screenShotBtn;
 52     private AMapNavi mapNavi;
 53     
 54     @Override
 55     protected void onCreate(Bundle savedInstanceState) {
 56         // TODO Auto-generated method stub
 57         super.onCreate(savedInstanceState);
 58         setContentView(R.layout.activity_map_type);
 59         
 60         mMapView = (MapView) findViewById(R.id.map);
 61         mMapView.onCreate(savedInstanceState);
 62         initAMap();
 63     }
 64     
 65     /**
 66      * 初始化AMap对象
 67      */
 68     private void initAMap(){
 69         if(aMap == null){
 70             aMap = mMapView.getMap();
 71         }
 72         
 73         findViewById();
 74         setUpMap();
 75         setUpNaviMap();
 76     }
 77     
 78     
 79     private void setUpMap(){
 80         // 设置定位监听。如果不设置此定位资源则定位按钮不可点击。
 81         aMap.setLocationSource(this);
 82         // 设置默认定位按钮是否显示
 83         aMap.getUiSettings().setMyLocationButtonEnabled(true);
 84         // 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false
 85         aMap.setMyLocationEnabled(true);
 86         //设置定位的类型为定位模式 ,可以由定位、跟随或地图根据面向方向旋转几种
 87         aMap.setMyLocationType(AMap.LOCATION_TYPE_MAP_FOLLOW);
 88         // 自定义系统定位蓝点
 89         MyLocationStyle myLocationStyle = new MyLocationStyle();
 90         // 自定义定位蓝点图标
 91         myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.drawable.location_marker));
 92         // 自定义精度范围的圆形边框颜色
 93         myLocationStyle.strokeColor(Color.BLACK);
 94         // 设置圆形的填充颜色
 95         myLocationStyle.radiusFillColor(Color.argb(100, 0, 0, 180));
 96         //自定义精度范围的圆形边框宽度
 97         myLocationStyle.strokeWidth(5);
 98         // 将自定义的 myLocationStyle 对象添加到地图上
 99         aMap.setMyLocationStyle(myLocationStyle);
100         // 构造 LocationManagerProxy 对象
101         mLocationManagerProxy = LocationManagerProxy.getInstance(MapTypeActivity.this);
102         
103         
104     }
105     
106     private void setUpNaviMap(){
107         mapNavi = AMapNavi.getInstance(this);
108         
109     }
110     /**
111      * 获取单选圆框控件
112      */
113     private void findViewById(){
114         mAMapTypesRG = (RadioGroup) findViewById(R.id.map_type_rg);
115         mTrafficCB = (CheckBox) findViewById(R.id.trafficCB);
116         screenShotBtn = (Button) findViewById(R.id.screenShotBtn);
117         
118         setListeners();
119     }
120     
121     /**
122      * 设置监听器
123      */
124     private void setListeners(){
125         mAMapTypesRG.setOnCheckedChangeListener(this.myOnCheckedChangeListener);
126         mTrafficCB.setOnCheckedChangeListener(this.myCBOnCheckedChangeListener);
127         screenShotBtn.setOnClickListener(this.myOnClickListener);
128     }
129     
130     View.OnClickListener myOnClickListener = new View.OnClickListener() {
131         
132         @Override
133         public void onClick(View v) {
134             // TODO Auto-generated method stub
135             screenShot(v);
136         }
137     };
138     
139     private void screenShot(View v){
140         // 设置截屏监听接口,截取地图可视区域
141         aMap.getMapScreenShot(this);
142     }
143     RadioGroup.OnCheckedChangeListener myOnCheckedChangeListener = new OnCheckedChangeListener() {
144         
145         @Override
146         public void onCheckedChanged(RadioGroup group, int checkedId) {
147             // TODO Auto-generated method stub
148             switch(checkedId){
149             //矢量地图模式
150             case R.id.map_type_normal_rb:
151                 aMap.setMapType(AMap.MAP_TYPE_NORMAL);
152                 break;
153             //卫星地图模式
154             case R.id.map_type_satellite_rb:
155                 aMap.setMapType(AMap.MAP_TYPE_SATELLITE);
156                 break;
157             //夜景地图模式
158                 
159             case R.id.map_type_night_rb:
160                 aMap.setMapType(AMap.MAP_TYPE_NIGHT);
161                 break;
162             }
163         }
164     };
165     
166     CompoundButton.OnCheckedChangeListener myCBOnCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() {
167         
168         @Override
169         public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
170             // TODO Auto-generated method stub
171             aMap.setTrafficEnabled(isChecked);
172         }
173     };
174 
175 
176     @Override
177     public void activate(OnLocationChangedListener onLocationChangedListener) {
178         // TODO Auto-generated method stub
179         mListener = onLocationChangedListener;
180         if (mLocationManagerProxy == null) {
181             mLocationManagerProxy = LocationManagerProxy.getInstance(this);
182             /*
183              * mAMapLocManager.setGpsEnable(false);
184              * 1.0.2版本新增方法,设置true表示混合定位中包含gps定位,false表示纯网络定位,默认是true Location
185              * API定位采用GPS和网络混合定位方式
186              * ,第一个参数是定位provider,第二个参数时间最短是2000毫秒,第三个参数距离间隔单位是米,第四个参数是定位监听者
187              */
188             //此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
189             //注意设置合适的定位时间的间隔,并且在合适时间调用removeUpdates()方法来取消定位请求
190             //在定位结束后,在合适的生命周期调用destroy()方法
191             //其中如果间隔时间为-1,则定位只定一次
192             mLocationManagerProxy.requestLocationData(LocationProviderProxy.AMapNetwork, -1, 10, this);
193         }
194     }
195 
196     
197     /**
198      * 停止定位
199      */
200     @Override
201     public void deactivate() {
202         // TODO Auto-generated method stub
203         mListener = null;
204         if (mLocationManagerProxy != null) {
205             mLocationManagerProxy.removeUpdates(this);
206             mLocationManagerProxy.destroy();
207         }
208         mLocationManagerProxy = null;
209     }
210 
211     @Override
212     public void onLocationChanged(Location location) {
213         // TODO Auto-generated method stub
214         
215     }
216 
217     @Override
218     public void onProviderDisabled(String provider) {
219         // TODO Auto-generated method stub
220         
221     }
222 
223     @Override
224     public void onProviderEnabled(String provider) {
225         // TODO Auto-generated method stub
226         
227     }
228 
229     @Override
230     public void onStatusChanged(String provider, int status, Bundle extras) {
231         // TODO Auto-generated method stub
232         
233     }
234 
235     @Override
236     public void onLocationChanged(AMapLocation aMapLocation) {
237         // TODO Auto-generated method stub
238         if (mListener != null && aMapLocation != null) {
239             mListener.onLocationChanged(aMapLocation);// 显示系统小蓝点
240         }
241     }
242 
243     @Override
244     public void onMapScreenShot(Bitmap bitmap) {
245         // TODO Auto-generated method stub
246         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
247         try {
248             // 保存在SD卡根目录下,图片为png格式。
249             FileOutputStream fos = new FileOutputStream(
250                     Environment.getExternalStorageDirectory() + "/test_"
251                             + sdf.format(new Date()) + ".png");
252             boolean b = bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
253             try {
254                 fos.flush();
255             } catch (IOException e) {
256                 e.printStackTrace();
257             }
258             try {
259                 fos.close();
260             } catch (IOException e) {
261                 e.printStackTrace();
262             }
263             if (b)
264                 Toast.makeText(this, "截屏成功", Toast.LENGTH_SHORT).show();
265             else {
266                 Toast.makeText(this, "截屏失败", Toast.LENGTH_SHORT).show();
267             }
268         } catch (FileNotFoundException e) {
269             e.printStackTrace();
270         }
271     }
272 }
View Code

不过这里截图成功的图片需要通过一定的步骤才能看到:

“开始”  输入“cmd” 进入如下截图路径下(具体情况具体分析,反正是进入adb目录下,要连着真机测试哦)

输入:adb shell 

然后输入:cd sdcard

查看命令:ls

看到那张图片的名字,然后导出到我们的电脑上进行查看:

接着上一步的查看命令来,再输入:exit

退出来输入:adb pull sdcard/文件名 D:/

然后在D盘的根目录下查看此截图

未完待续。。。。

原文地址:https://www.cnblogs.com/ouyangduoduo/p/4619407.html