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>

然后就是实现我的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 }

至于怎么样在手机上来显示这个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>

然后就是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 }

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

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

以下是我的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>

然后是实现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 }

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

下面是我的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>

然后就是我的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 }

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

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

输入:adb shell

然后输入:cd sdcard

查看命令:ls

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

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

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

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

未完待续。。。。

时间: 2024-10-25 10:15:36

Android学习之高德地图的通用功能开发步骤的相关文章

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

周一又来了,我就接着上次的开发步骤(一)来吧,继续把高德地图的相关简单功能分享一下 上次写到了第六步,接着写第七步吧. 第七步:定位 + 地图选点 + 路径规划 + 实时导航 以下是我的这个功能NaviMapActivity的页面布局文件: 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com

Android 快速掌握高德地图SDK(内含实践项目)

上周学习了高德地图和极光推送的SDK,需要在项目中用到,不过学习起来还是费了一番功夫去看文档和Demo代码的.(不得不吐槽部分文档真的无厘头,只有简单的实例程序注释都没有,上下文还不对接,真是醉了),所以打算把最直白的步骤写在博客中,也希望能帮到还不会用这两种SDK的小伙伴们,少走弯路,提高工作效率. 本文主要介绍高德地图SDK的使用步骤: 包括从获取Key,到导包,到布局文件,以及编码实现. 还有两个最常用的功能: 实现定位自身. 根据地名或者坐标实现搜索定位并显示小蓝点. 一.获取高德Key

Android Studio之高德地图实现定位和3D地图显示

在应用开发中,地图开发是经常需要使用的"组件",国内比较出名的是就是百度地图和高德地图. 此博客讲的是高德地图实现定位和3D地图显示,并标注相应位置,话不多说,先看看效果,在上代码. 效果如图: 首先注册高德成为开发者(打开高德地图,点击底部的开发者平台),创建应用,按照要求填写相应信息,如下图: 途中包含了发布版的SHA1安全码和测试版SHA1安全码,两者的值可以看  博客 :Android Studio apk打包,keystore.jks文件生成,根据keystore密钥获取SH

Android项目外接高德地图代码混淆注意事项

如今好多项目中都加入了第三方jar包,可是最大的问题就是打包的时候代码混淆报错,下面是高德地图混淆报错解决方式: 在proguard-project.txt中加入例如以下代码: -libraryjars   libs/android-support-v4.jar -dontwarn android.support.v4.** -keep class android.support.v4.** { *; } -keep interface android.support.v4.app.** { *

高德地图——一款功能强大的APP

软件介绍 高德地图 是国内一流的免费地图导航产品,也是基于位置的生活服务功能最全面. 高德地图信息最丰富的手机地图,由国内最大的电子地图.导航和LBS服务解决方案提供商高德软件(纳斯达克Amap)提供. 高德地图采用领先的技术为用户打造了最好用的"活地图",不管在哪.去哪.找哪.怎么去.想干什么一图在手,统统搞定,省电省流量更省钱,堪称最完美的生活出行软件,本土化评价. [最专业的地图导航]地图数据覆盖中国大陆及香港澳门,遍及337个地级2857个县级以上行政区划单位;导航支持GPS.

关于Android studio调用高德地图的简单流程和要点

一,账号与Key的申请 注册成为高德开发者需要分三步: 第一步,注册高德开发者:第二步,去控制台创建应用:第三步,获取Key. 前2步都比较简单,这里说下第三步. 获取Key 1.进入控制台,创建一个新应用.如果您之前已经创建过应用,可直接跳过这个步骤. 2. 在创建的应用上点击”添加新Key”按钮,在弹出的对话框中,依次:输入应用名名称,选择绑定的服务为“Android平台SDK”,输入发布版安全码 SHA1.调试版安全码 SHA1.以及 Package,如下图所示: 获取SHA1见:http

android 更新到高德地图2.X.X版本,打包后地图提示invalid_user_scode

高德地图2.X.X以前的版本将在2015年2月28日停用,所以前段时间把高德的几个包都更新了,也同时申请了新的key,可是今天准备打包发布,打完包后,地图不能用了,提示invalid_user_scode,查阅了一下资料情况是:  确保在工程中添加的key为9月23日之后注册的.在debug模式下,或者最终打包签名release模式时,App的签名文件是不一样的:所以对应的Key的sha1值也应该同步替换:当使用不同的IDE调试或打包同一个工程时,也请确保IDE中的签名文件是同步过的. 这里讲的

【视频教学】如何利用高德地图IOS SDK进行开发?

Step1:使用IOS SDK可以做什么高德地图 iOS SDK 是一套基于 iOS 5.1.1 及以上版本的地图应用程序开发接口.通过该接口,用户可使用高德地图数据和服务轻松构建功能丰富.交互性强的地图应用.地图 iOS SDK 不仅包含构建地图的基本接口,还提供了诸如本地搜索.路线规划.公交搜索以及坐标地址搜索等服务,用户可以根据自己的需要进行选择.高德地图 iOS SDK的服务是免费的,任何非盈利性网站均可使用.您需要先申请Key,才能使用该服务.  Step2:视频学教程如何使用IOS

Android学习之仿QQ側滑功能的实现

如今项目越来越多的应用了滑动删除的功能,Android本来遵循的是长按删除,IOS定制的是滑动删除,不可否认滑动删除确实在客户体验上要好一点,所以看了非常多关于仿QQ滑动删除的样例,还是感觉代码家的Android Swipe Layout要好一点,至于为何好,以下我给大家实验一下大家就知道了 老规矩.贴上效果图.这样大家才干更近距离的了解 这是代码家的效果图,效果非常多,支持listview.gridview,当然recylerview也是支持的. 可是呢,有个问题,代码家的效果非常多.可是我们