diff --git a/src/MyApplication/app/src/MyApplication/app/src/main/java/com/example/myapplication/MapActivity1.java b/src/MyApplication/app/src/MyApplication/app/src/main/java/com/example/myapplication/MapActivity1.java index 0318a11..08bb720 100644 --- a/src/MyApplication/app/src/MyApplication/app/src/main/java/com/example/myapplication/MapActivity1.java +++ b/src/MyApplication/app/src/MyApplication/app/src/main/java/com/example/myapplication/MapActivity1.java @@ -1,37 +1,221 @@ package com.example.myapplication; +import android.Manifest; +import android.app.Activity; +import android.content.pm.PackageManager; +import android.os.Bundle; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; -import android.annotation.SuppressLint; -import android.os.Bundle; +import com.baidu.location.BDAbstractLocationListener; +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.BitmapDescriptor; +import com.baidu.mapapi.map.BitmapDescriptorFactory; +import com.baidu.mapapi.map.MapStatus; +import com.baidu.mapapi.map.MapStatusUpdate; +import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; - -public class MapActivity1 extends AppCompatActivity { +import com.baidu.mapapi.map.MyLocationConfiguration; +import com.baidu.mapapi.map.MyLocationData; +import com.baidu.mapapi.model.LatLng; +/* +public class MapActivity1 extends Activity { private MapView mMapView = null; - @SuppressLint("MissingInflatedId") + private BaiduMap mBaiduMap; + private LocationClient mLocationClient; + private BitmapDescriptor mMarker; + private boolean ifFrist = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_map1); - mMapView= (MapView) findViewById(R.id.bmapview); + mMapView = findViewById(R.id.bmapview); + mBaiduMap = mMapView.getMap(); + mLocationClient = new LocationClient(this); + + MyLocationListener myLocationListener = new MyLocationListener(); + mLocationClient.registerLocationListener(myLocationListener); + + //覆盖物 用于显示当前位置 + mMarker = BitmapDescriptorFactory.fromResource(com.baidu.bikenavi.R.drawable.icon_start_walk); + mBaiduMap.setMyLocationEnabled(true); + LocationClientOption option = new LocationClientOption(); + //可选,默认高精度,设置定位模式,高精度,低功耗,仅设备 + option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); + option.setOpenGps(true); // 打开gps + option.setCoorType("bd09ll"); // 设置坐标类型 + option.setScanSpan(1000); + option.setIsNeedAddress(true); + mLocationClient.setLocOption(option); + mLocationClient.start(); + } + + + public class MyLocationListener extends BDAbstractLocationListener { + @Override + public void onReceiveLocation(BDLocation location) { + //mapView 销毁后不在处理新接收的位置 + if (location == null || mMapView == null){ + return; + } + MyLocationData locData = new MyLocationData.Builder() + .accuracy(location.getRadius()) + // 此处设置开发者获取到的方向信息,顺时针0-360 + .latitude(location.getLatitude()) + .longitude(location.getLongitude()) + .direction(location.getDirection()) + .build(); + mBaiduMap.setMyLocationData(locData); + + MyLocationConfiguration configuration = new MyLocationConfiguration( + MyLocationConfiguration.LocationMode.NORMAL, false, mMarker); + + mBaiduMap.setMyLocationConfiguration(configuration); + + if (ifFrist) { + LatLng ll = new LatLng(location.getLatitude(), location.getLongitude()); + MapStatus.Builder builder = new MapStatus.Builder(); + builder.target(ll); + builder.zoom(18.0f); + mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build())); + //放大层级 + ifFrist = false; + } + + } } + @Override protected void onResume() { super.onResume(); - //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 mMapView.onResume(); } @Override protected void onPause() { super.onPause(); - //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 - mMapView.onPause(); + mMapView=findViewById(R.id.bmapview); + mMapView.onResume(); } @Override protected void onDestroy() { super.onDestroy(); - //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 + mLocationClient.stop(); mMapView.onDestroy(); } } +*/ + +public class MapActivity1 extends AppCompatActivity { + private BitmapDescriptor mMarker; + LocationClient mLocationClient; //定位客户端 + MapView mapView; //Android Widget地图控件 + BaiduMap baiduMap; + boolean isFirstLocate = true; + + TextView tv_Lat; //纬度 + TextView tv_Lon; //经度 + TextView tv_Add; //地址 + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + //如果没有定位权限,动态请求用户允许使用该权限 + if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1); + }else { + requestLocation(); + } + } + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + // super.onRequestPermissionsResult(requestCode, permissions, grantResults); + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + switch (requestCode) { + case 1: + if (grantResults[0] != PackageManager.PERMISSION_GRANTED) { + Toast.makeText(this, "没有定位权限!", Toast.LENGTH_LONG).show(); + finish(); + } else { + requestLocation(); + } + } + } + private void requestLocation() { + initLocation(); + mLocationClient.start(); + } + private void initLocation() { //初始化 + mLocationClient = new LocationClient(getApplicationContext()); + mLocationClient.registerLocationListener(new MyLocationListener()); + SDKInitializer.initialize(getApplicationContext()); + setContentView(R.layout.activity_map1); + // mMarker = BitmapDescriptorFactory.fromResource(com.baidu.bikenavi.R.drawable.icon_start_walk); + mapView = findViewById(R.id.bmapview); + baiduMap = mapView.getMap(); + tv_Lat = findViewById(R.id.tv_Lat); + tv_Lon = findViewById(R.id.tv_Lon); + tv_Add = findViewById(R.id.tv_Add); + + LocationClientOption option = new LocationClientOption(); + //设置扫描时间间隔 + option.setScanSpan(1000); + //设置定位模式,三选一 + option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); + + //设置需要地址信息 + option.setIsNeedAddress(true); + //保存定位参数 + mLocationClient.setLocOption(option); + } + //内部类,百度位置监听器 + private class MyLocationListener implements BDLocationListener { + @Override + public void onReceiveLocation(BDLocation bdLocation) { + tv_Lat.setText(bdLocation.getLatitude()+""); + tv_Lon.setText(bdLocation.getLongitude()+""); + tv_Add.setText(bdLocation.getAddrStr()); + if(bdLocation.getLocType()==BDLocation.TypeGpsLocation || bdLocation.getLocType()==BDLocation.TypeNetWorkLocation){ + navigateTo(bdLocation); + } + } + MyLocationConfiguration configuration = new MyLocationConfiguration( + MyLocationConfiguration.LocationMode.NORMAL, false, mMarker); +// + // baiduMap.setMyLocationConfiguration(configuration); + } + private void navigateTo(BDLocation bdLocation) { + if(isFirstLocate){ + LatLng ll = new LatLng(bdLocation.getLatitude(),bdLocation.getLongitude()); + MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll); + baiduMap.animateMapStatus(update); + + isFirstLocate = false; + } + } + @Override + protected void onResume() { + super.onResume(); + mapView.onResume(); + } + @Override + protected void onPause() { + super.onPause(); + mapView=findViewById(R.id.bmapview); + mapView.onResume(); + } + @Override + protected void onDestroy() { + super.onDestroy(); + mLocationClient.stop(); + mapView.onDestroy(); + } +} diff --git a/src/MyApplication/app/src/MyApplication/app/src/main/res/layout/activity_map1.xml b/src/MyApplication/app/src/MyApplication/app/src/main/res/layout/activity_map1.xml index 556607b..e939697 100644 --- a/src/MyApplication/app/src/MyApplication/app/src/main/res/layout/activity_map1.xml +++ b/src/MyApplication/app/src/MyApplication/app/src/main/res/layout/activity_map1.xml @@ -1,15 +1,85 @@ - + tools:context=".MapActivity1"> + + + + + + + + + + + + + - + + + + + \ No newline at end of file