安卓项目SimpleQQ——高德地图定位
完整项目介绍看这里:安卓项目SimpleQQ概述,可下载源码。
首先高德地图开发者中心注册账号,并下载相应的jar包
在AndroidManifest.xml中注册高德Key使用的SHA1值
<meta-data android:name="com.amap.api.v2.apikey" android:value="03e9443c565a1****************">//开发者申请的keymeta-data><service android:name="com.amap.api.location.APSService"/>
显示地图:activity_map.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:orientation="vertical"tools:context=".utils.MapActivity"android:layout_width="match_parent"android:layout_height="match_parent"><com.amap.api.maps2d.MapView
android:id="@+id/map"android:layout_width="fill_parent"android:layout_height="wrap_content"/>RelativeLayout>
MapActivity
package com.example.yangenneng0.myapplication.utils;import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast;
import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.maps2d.*;
import com.amap.api.maps2d.model.LatLng;
import com.amap.api.maps2d.model.MarkerOptions;
import com.amap.api.maps2d.model.MyLocationStyle;
import com.example.yangenneng0.myapplication.R;import java.text.SimpleDateFormat;
import java.util.Date;/*** User: yangenneng* DateTime: 2016/12/11 10:08* Description:* 由于SDK并没有提供用于管理地图生命周期的Activity,因此需要用户继承Activity后管理地图的生命周期,防止内存泄露*///监听定位和定位变化
public class MapActivity extends AppCompatActivity implements LocationSource, AMapLocationListener {//显示地图需要的变量AMap aMap= null;MapView mMapView = null;//定位需要的声明private AMapLocationClient mLocationClient = null; //定位发起端private AMapLocationClientOption mLocationOption = null; //定位参数private OnLocationChangedListener mListener = null; //定位监听器//标识,用于判断是否只显示一次定位信息和用户重新定位private boolean isFirstLoc = true;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_map);//获取地图控件引用mMapView = (MapView) findViewById(R.id.map);//在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),实现地图生命周期管理mMapView.onCreate(savedInstanceState);if(aMap==null){aMap = mMapView.getMap();//由MapView实例化AMap //初始化地图变量}UiSettings settings = aMap.getUiSettings(); //设置显示定位按钮 并且可以点击aMap.setLocationSource(this); //设置定位监听settings.setMyLocationButtonEnabled(true); // 是否显示定位按钮aMap.setMyLocationEnabled(true); // 是否可触发定位并显示定位层//定位的小图标 默认是蓝点MyLocationStyle myLocationStyle = new MyLocationStyle();myLocationStyle.radiusFillColor(android.R.color.transparent);myLocationStyle.strokeColor(android.R.color.transparent);aMap.setMyLocationStyle(myLocationStyle);//开始定位initLoc();}//定位private void initLoc() {mLocationClient = new AMapLocationClient(getApplicationContext()); //初始化定位mLocationClient.setLocationListener(this); //设置定位回调监听mLocationOption = new AMapLocationClientOption(); //初始化定位参数//设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);mLocationOption.setNeedAddress(true); //设置是否返回地址信息(默认返回地址信息)mLocationOption.setOnceLocation(false); //设置是否只定位一次,默认为falsemLocationOption.setWifiActiveScan(true); //设置是否强制刷新WIFI,默认为强制刷新mLocationOption.setMockEnable(false); //设置是否允许模拟位置,默认为false,不允许模拟位置mLocationOption.setInterval(2000); //设置定位间隔,单位毫秒,默认为2000msmLocationClient.setLocationOption(mLocationOption); //给定位客户端对象设置定位参数mLocationClient.startLocation(); //启动定位}@Overrideprotected void onDestroy() {super.onDestroy();//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理mMapView.onDestroy();}@Overrideprotected void onResume() {super.onResume();//在activity执行onResume时执行mMapView.onResume (),实现地图生命周期管理mMapView.onResume();}@Overrideprotected void onPause() {super.onPause();//在activity执行onPause时执行mMapView.onPause (),实现地图生命周期管理mMapView.onPause();}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),实现地图生命周期管理mMapView.onSaveInstanceState(outState);}@Overridepublic void onLocationChanged(AMapLocation amapLocation) {if (amapLocation != null) {if ( amapLocation.getErrorCode() == 0 ) {//定位成功回调信息,设置相关消息amapLocation.getLocationType(); //获取当前定位结果来源,如网络定位结果,详见官方定位类型表amapLocation.getLatitude(); //获取纬度amapLocation.getLongitude(); //获取经度amapLocation.getAccuracy(); //获取精度信息SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = new Date(amapLocation.getTime());df.format(date); //定位时间amapLocation.getAddress(); //地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。amapLocation.getCountry(); //国家信息amapLocation.getProvince(); //省信息amapLocation.getCity(); //城市信息amapLocation.getDistrict(); //城区信息amapLocation.getStreet(); //街道信息amapLocation.getStreetNum(); //街道门牌号信息amapLocation.getCityCode(); //城市编码amapLocation.getAdCode(); //地区编码// 如果不设置标志位,此时再拖动地图时,它会不断将地图移动到当前的位置if ( isFirstLoc ) {//设置缩放级别aMap.moveCamera(CameraUpdateFactory.zoomTo(17));//将地图移动到定位点aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(amapLocation.getLatitude(), amapLocation.getLongitude())));//点击定位按钮 能够将地图的中心移动到定位点mListener.onLocationChanged(amapLocation);//添加图钉aMap.addMarker(getMarkerOptions(amapLocation));//获取定位信息StringBuffer buffer = new StringBuffer();buffer.append(amapLocation.getCountry() + "" + amapLocation.getProvince() + "" + amapLocation.getCity() + "" + amapLocation.getProvince() + "" + amapLocation.getDistrict() + "" + amapLocation.getStreet() + "" + amapLocation.getStreetNum());Toast.makeText(getApplicationContext(), buffer.toString(), Toast.LENGTH_LONG).show();isFirstLoc = false;}} else {//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。Log.e("AmapError", "location Error, ErrCode:"+ amapLocation.getErrorCode() + ", errInfo:"+ amapLocation.getErrorInfo());Toast.makeText(getApplicationContext(), "定位失败", Toast.LENGTH_LONG).show();}}}//自定义一个图钉,并且设置图标,当我们点击图钉时,显示设置的信息private MarkerOptions getMarkerOptions(AMapLocation amapLocation) {MarkerOptions options = new MarkerOptions(); //设置图钉选项options.position(new LatLng(amapLocation.getLatitude(), amapLocation.getLongitude()));//位置StringBuffer buffer = new StringBuffer();buffer.append(amapLocation.getCountry() + "" + amapLocation.getProvince() + "" + amapLocation.getCity() + "" + amapLocation.getDistrict() + "" + amapLocation.getStreet() + "" + amapLocation.getStreetNum());options.title(buffer.toString()); //标题options.snippet("我在这里"); //子标题options.period(60); //设置多少帧刷新一次图片资源return options;}//激活定位@Overridepublic void activate(OnLocationChangedListener onLocationChangedListener) {mListener = onLocationChangedListener;}//停止定位@Overridepublic void deactivate() {mListener = null;}}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
