高德地图——加载当前位置 LBS获取自定义坐标
2017-04-29 15:43
453 查看
高德地图 加载当前位置 LBS获取自定义坐标
package com.exam.aisan3; import android.Manifest; import android.annotation.TargetApi; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.NavigationView; import android.support.design.widget.Snackbar; import android.support.v4.app.ActivityCompat; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; 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.maps.AMap; import com.amap.api.maps.CameraUpdateFactory; import com.amap.api.maps.LocationSource; import com.amap.api.maps.MapView; import com.amap.api.maps.UiSettings; import com.amap.api.maps.model.LatLng; import com.amap.api.maps.model.MarkerOptions; import com.amap.api.maps.model.MyLocationStyle; import com.amap.api.services.cloud.CloudItem; import com.amap.api.services.cloud.CloudItemDetail; import com.amap.api.services.cloud.CloudResult; import com.amap.api.services.cloud.CloudSearch; import com.amap.api.services.core.LatLonPoint; import java.util.List; public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, LocationSource, AMapLocationListener, CloudSearch.OnCloudSearchListener { MapView mMapView = null; MyLocationStyle myLocationStyle; AMa 4000 p aMap; OnLocationChangedListener mListener; AMapLocationClient mlocationClient; AMapLocationClientOption mLocationOption; private static final int BAIDU_READ_PHONE_STATE =100; private CloudSearch mCloudSearch; private CloudSearch.Query mQuery; private AMapLocation amapLocation; private String mTableID; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取地图控件引用 mMapView = (MapView) findViewById(R.id.map); //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图 mMapView.onCreate(savedInstanceState); //判断是否为android6.0系统版本,如果是,需要动态添加权限 if (Build.VERSION.SDK_INT>=23){ showContacts(); }else{ initMap();//init为定位方法 } Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "正在搜索附近的雨伞", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawer.setDrawerListener(toggle); toggle.syncState(); NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this); } public void onCloudSearched(CloudResult cloudResult, int rCode){ //数据展现 List<CloudItem> CloudItem=cloudResult.getClouds(); for(int i=0;i<cloudResult.getTotalCount();i++){ LatLonPoint La=CloudItem.get(i).getLatLonPoint(); LatLng latLng =new LatLng(La.getLatitude(),La.getLongitude()); aMap.addMarker(new MarkerOptions().position(latLng).title("智能伞").snippet("Aisan")); } } @Override public void onCloudItemDetailSearched(CloudItemDetail cloudItemDetail, int i) { } private void initMap() { //初始化地图控制器对象 if (aMap == null) { aMap = mMapView.getMap(); } // 设置定位的比例尺 aMap.moveCamera(CameraUpdateFactory.zoomTo(18)); // 设置定位监听 aMap.setLocationSource(this); // 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false aMap.setMyLocationEnabled(true); // 设置定位的类型为定位模式,有定位、跟随或地图根据面向方向旋转几种 aMap.setMyLocationType(AMap.MAP_TYPE_NORMAL); //设置缩放按钮的位置 UiSettings uiSettings = aMap.getUiSettings(); uiSettings.setZoomControlsEnabled(false); uiSettings.setMyLocationButtonEnabled(true); //显示默认的定位按钮 //uiSettings.setZoomPosition(AMapOptions.ZOOM_POSITION_RIGHT_CENTER); } @Override public void onBackPressed() { DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); } else { super.onBackPressed(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } @SuppressWarnings("StatementWithEmptyBody") @Override public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); if (id == R.id.nav_camera) { // Handle the camera action } else if (id == R.id.nav_gallery) { } else if (id == R.id.nav_slideshow) { } else if (id == R.id.nav_manage) { } else if (id == R.id.nav_share) { } else if (id == R.id.nav_send) { } DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; } /** * 激活定位 */ @Override public void activate(OnLocationChangedListener listener) { mListener = listener; if (mlocationClient == null) { //初始化定位 mlocationClient = new AMapLocationClient(this); //初始化定位参数 mLocationOption = new AMapLocationClientOption(); //设置定位回调监听 mlocationClient.setLocationListener(this); //设置为高精度定位模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); //设置定位参数 mlocationClient.setLocationOption(mLocationOption); // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗, // 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求 mLocationOption.setInterval(5000); // 在定位结束后,在合适的生命周期调用onDestroy()方法 // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除 mlocationClient.startLocation();//启动定位 } } /** * 停止定位 */ @Override public void deactivate() { mListener = null; if (mlocationClient != null) { mlocationClient.stopLocation(); mlocationClient.onDestroy(); } mlocationClient = null; } @Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图 mMapView.onDestroy(); if(null != mlocationClient){ mlocationClient.onDestroy(); } } @Override protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图 mMapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制 mMapView.onPause(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态 mMapView.onSaveInstanceState(outState); } @TargetApi(Build.VERSION_CODES.N) @Override public void onLocationChanged(AMapLocation amapLocation) { if (mListener != null&&amapLocation != null) { if (amapLocation != null &&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);//定位时间 mListener.onLocationChanged(amapLocation);// 显示系统小蓝点 mCloudSearch = new CloudSearch(this);// 初始化查询类 mCloudSearch.setOnCloudSearchListener(this);// 设置回调函数 // 设置中心点及检索范围 CloudSearch.SearchBound bound = new CloudSearch.SearchBound(new LatLonPoint( amapLocation.getLatitude(), amapLocation.getLongitude()), 4000); //设置查询条件 mTableID是将数据存储到数据管理台后获得。 try { mQuery = new CloudSearch.Query("590411757bbf197dd18f0059","中国计量大学现 a4ad 代科技学院-乾学教育", bound); } catch (com.amap.api.services.core.AMapException e) { e.printStackTrace(); } mCloudSearch.searchCloudAsyn(mQuery);// 异步搜索 } else { String errText = "定位失败," + amapLocation.getErrorCode()+ ": " + amapLocation.getErrorInfo(); Log.e("AmapErr",errText); } } } /*权限申请部分*/ public void showContacts(){ if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { Toast.makeText(getApplicationContext(),"没有权限,请手动开启定位权限",Toast.LENGTH_SHORT).show(); // 申请一个(或多个)权限,并提供用于回调返回的获取码(用户定义) ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.READ_PHONE_STATE}, BAIDU_READ_PHONE_STATE); }else{ initMap(); } } //Android6.0申请权限的回调方法 @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { // requestCode即所声明的权限获取码,在checkSelfPermission时传入 case BAIDU_READ_PHONE_STATE: if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 获取到权限,作相应处理(调用定位SDK应当确保相关权限均被授权,否则可能引起定位失败) initMap(); } else { // 没有获取到权限,做特殊处理 Toast.makeText(getApplicationContext(), "获取位置权限失败,请手动开启", Toast.LENGTH_SHORT).show(); } break; default: break; } } }
相关文章推荐
- 高德地图自定义定位当前位置按钮
- 高德地图获取位置分析坐标
- 高德地图准确获取当前位置信息
- HTML5 调用 GPSAPI 获取当前位置的坐标 显示在地图上(有包括百度地图与谷歌地图)
- WinRT获取坐标和当前的位置
- MKMapView上获取自身当前位置并将地图显示范围控制在自身位置周围
- 获取鼠标当前位置坐标的方法 - 回复 "ps8.0" 同学
- IOS——地图的使用、地图定位到当前位置(包括ios8获取位置)、地图标注的添加、地图放大缩小监听
- (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
- Android Google Map 地图中自定义当前位置
- 地图获取当前位置
- 使用Cobub&nbsp;LBS位置服务获取当前位…
- 在skyline中获取当前鼠标的位置坐标,屏蔽右键菜单
- Object-C中获取当前触摸点的坐标位置
- 百度地图实时获取当前位置坐标并实时定位
- 要获取当前页面的滚动条纵坐标位置,用:document.documentElement.scrollTop
- js与jquery中获取当前鼠标的x、y坐标位置的代码
- delphi 获取鼠标当前位置的相对坐标
- (android地图开发) 基于百度Lbs服务定位用户的当前位置
- 百度地图最新版本sdk使用系列(八)-获取当前地图中心点的经纬度并计算与当前位置的距离