百度地图的使用
来源:互联网 发布:现在的淘宝太坑了女孩 编辑:程序博客网 时间:2024/05/01 11:17
其余代码解析可在上一篇博文《位置服务实例》中查看
加载百度地图:
先初始化,再新建MapView对象绑定地图api控件,最后重写3个方法。
移动到本机所在地:
新建BaiduMap示例,联系MapView对象,编写一个获取本机纬度经度和设置缩放级别以BDLocation对象为参数的方法,再在监听类中调用该方法。代码如下:
MainActivity.class:
import android.Manifest;import android.content.pm.PackageManager;import android.os.Bundle;import android.support.v4.app.ActivityCompat;import android.support.v4.content.ContextCompat;import android.support.v7.app.AppCompatActivity;import android.widget.TextView;import android.widget.Toast;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.mapapi.SDKInitializer;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.MapStatusUpdate;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.model.LatLng;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { private LocationClient locationClient; private TextView positionText; private MapView mapView; //加载百度地图,默认位置为北京市 private BaiduMap baiduMap; //用于在百度地图定位到本机所处位置 private boolean isFirstLocate=true; @Override protected void onCreate(Bundle saveInstanceState){ super.onCreate(saveInstanceState); locationClient=new LocationClient(getApplicationContext()); locationClient.registerLocationListener(new MyLocationListener()); //注册位置监听器 SDKInitializer.initialize(getApplicationContext()); //加载百度地图,初始化,必须在绑定布局前初始化 setContentView(R.layout.activity_main); positionText=(TextView)findViewById(R.id.position_text_view); mapView=(MapView)findViewById(R.id.bmapView); //加载百度地图,绑定地图控件 baiduMap=mapView.getMap();//获取地图管理器以操作地图
List<String> permissionList=new ArrayList<>(); //存放需要动态申请运行时权限的权限 if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){ permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION); } if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.READ_PHONE_STATE)!=PackageManager.PERMISSION_GRANTED){ permissionList.add(Manifest.permission.READ_PHONE_STATE); } if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED){ permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); } if(!permissionList.isEmpty()){ //不为空则说明需要申请权限 String[] permissions=permissionList.toArray(new String[permissionList.size()]); ActivityCompat.requestPermissions(MainActivity.this,permissions,1); }else{ requestLocation(); } } //在地图上定位本机所在地 private void navigateTo(BDLocation location){ if(isFirstLocate){ LatLng ll=new LatLng(location.getLatitude(),location.getLongitude()); //获取所在地的纬度和经度 MapStatusUpdate update= MapStatusUpdateFactory.newLatLng(ll); baiduMap.animateMapStatus(update); update=MapStatusUpdateFactory.zoomTo(16f); //设定地图的缩放级别 baiduMap.animateMapStatus(update); isFirstLocate=false; }
} //加载百度地图 @Override protected void onResume(){ super.onResume(); mapView.onResume(); } @Override protected void onPause(){ super.onPause(); mapView.onPause(); } private void requestLocation(){ initLocation(); locationClient.start(); //触发监听器 } private void initLocation(){ LocationClientOption option=new LocationClientOption(); option.setScanSpan(5000); option.setIsNeedAddress(true); locationClient.setLocOption(option); } @Override protected void onDestroy(){ super.onDestroy(); locationClient.stop(); mapView.onDestroy(); } @Override public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults){ switch(requestCode){ case 1: if(permissions.length>0){ for(int result:grantResults){ if(result!=PackageManager.PERMISSION_GRANTED){ Toast.makeText(MainActivity.this,"需要权限!",Toast.LENGTH_SHORT).show(); finish(); return; } } requestLocation(); }else{ Toast.makeText(MainActivity.this,"未知错误!",Toast.LENGTH_SHORT).show(); finish(); } } } //监听器类 public class MyLocationListener implements BDLocationListener { @Override public void onConnectHotSpotMessage(String s, int i) { } @Override public void onReceiveLocation(BDLocation location){ if(location.getLocType()==BDLocation.TypeGpsLocation||location.getLocType()==BDLocation.TypeNetWorkLocation){ //传入location参数调用navigateTo方法,在地图上定位本机所在地 navigateTo(location); } StringBuilder currentPosition=new StringBuilder(); currentPosition.append("纬度:").append(location.getLatitude()).append("\n"); currentPosition.append("经线:").append(location.getLongitude()).append("\n"); currentPosition.append("国家:").append(location.getCountry()).append("\n"); currentPosition.append("省份:").append(location.getProvince()).append("\n"); currentPosition.append("城市:").append(location.getCity()).append("\n"); currentPosition.append("区县:").append(location.getDistrict()).append("\n"); currentPosition.append("街道:").append(location.getStreet()).append("\n"); currentPosition.append("定位方式:"); if(location.getLocType()==BDLocation.TypeGpsLocation){ currentPosition.append("GPS"); }else if(location.getLocType()==BDLocation.TypeNetWorkLocation){ currentPosition.append("网络"); } positionText.setText(currentPosition); } }}
activity_main.layout:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/position_text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone"/> <com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true"/></LinearLayout>
在地图上显示我:
MainActivity.class:
protected void onCreate(Bundle saveInstanceState){ super.onCreate(saveInstanceState); 。。。。 baiduMap.setMyLocationEnabled(true);}
private void navigateTo(BDLocation location){ if(isFirstLocate){ LatLng ll=new LatLng(location.getLatitude(),location.getLongitude()); //获取所在地的纬度和经度 MapStatusUpdate update= MapStatusUpdateFactory.newLatLng(ll); baiduMap.animateMapStatus(update); update=MapStatusUpdateFactory.zoomTo(16f); //设定地图的缩放级别 baiduMap.animateMapStatus(update); isFirstLocate=false; } MyLocationData.Builder locationBuilder=new MyLocationData.Builder(); locationBuilder.latitude(location.getLatitude()); locationBuilder.longitude(location.getLongitude()); MyLocationData locationData=locationBuilder.build(); baiduMap.setMyLocationData(locationData);}
protected void onDestroy(){ super.onDestroy(); baiduMap.setMyLocationEnabled(false); locationClient.stop(); mapView.onDestroy();}
阅读全文
1 0
- 百度地图的使用
- 百度地图的使用
- 百度地图的使用
- 百度地图的使用
- 百度地图的使用
- 百度地图_ 基础地图的使用
- 百度地图API的使用
- 百度地图api的使用
- Android 百度地图的使用
- 简单的使用百度地图
- Android百度地图的使用
- 百度地图的简单使用
- 百度地图定位的使用
- 百度地图的使用(定位)
- 百度地图定位的使用
- 使用百度地图的总结
- 百度地图的使用细节
- 百度地图API的使用
- 数组和集合的相互转化
- HTML5 Canvas笔记 -- 2
- Android模拟器启动报错解决方法之一
- Differences between Physical Address and Virtual Address!
- java中的final、static关键字
- 百度地图的使用
- CC2530 NV最细致讲解操作
- hexo 搭建 github pages 的备忘
- XListView
- SpringMVC学习(2)
- JSON和String对象的转化、在js中的传递
- android如何获取证书签名?
- 字符串查找游戏
- oracle数据库的几个常用的SQL 语句