第一步:在清单文件中申请权限,如下:

                                        

然后将自己创建应用申请到的ak密钥添加到value中,android:name是固定的

 

在添加一个LDB SDK服务(内容固定不变)

 

两种方式显示定位信息
第一种:经纬度,和省市区等详细位置(定位方式必须是网络定位才能显示详细位置信息)
第二种:图型形式

activity_main.xml代码如下:

            

MainActivity.java代码如下:

public class MainActivity extends AppCompatActivity {    private MapView BaiduMap;    private LocationClient Client;    private TextView Position;    private BaiduMap baiduMap;//地图总控制器    private boolean isFirstLocate = true;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //一定要在setContentView()前调用        SDKInitializer.initialize(getApplicationContext());        Client = new LocationClient(getApplicationContext());//获取全局Context        Client.registerLocationListener(new MyLocationListener());//注册一个定位监听器,获取位置信息,回调此定位监听器        setContentView(R.layout.activity_main);        BaiduMap = (MapView) findViewById(R.id.baiduMap);        Position = (TextView) findViewById(R.id.position);        List PermissionList = new ArrayList<>();        baiduMap = BaiduMap.getMap();//获取实例,可以对地图进行一系列操作,比如:缩放范围,移动地图        baiduMap.setMyLocationEnabled(true);//允许当前设备显示在地图上        //判断权限是否授权        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 lng = new LatLng(location.getLatitude(),location.getLongitude());//指定经纬度            MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(lng);            baiduMap.animateMapStatus(update);            update = MapStatusUpdateFactory.zoomTo(16f);//百度地图缩放级别限定在3-19            baiduMap.animateMapStatus(update);            isFirstLocate = false;        }        MyLocationData.Builder builder = new MyLocationData.Builder();        builder.latitude(location.getLatitude());        builder.longitude(location.getLongitude());        MyLocationData locationData = builder.build();        baiduMap.setMyLocationData(locationData);    }    private void requestLocation(){        InitLocation();        Client.start();    }    /*    * LBS SKD定位模式    * 1:Hight_Accuracy:高精确模式,优先使用GPS定位,其次使用网络定位    * 2:Battery_Saving:节电模式,使用网络定位    * 3:Device_Sensors:传感器模式,使用GPS    * */    private void InitLocation(){        LocationClientOption option = new LocationClientOption();        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//高精确模式        option.setScanSpan(5000);//ms        option.setIsNeedAddress(true);//获取详细信息许可        Client.setLocOption(option);    }    @Override    protected void onDestroy() {        super.onDestroy();        Client.stop();        BaiduMap.onDestroy();        baiduMap.setMyLocationEnabled(false);    }    @Override    protected void onResume() {        super.onResume();        BaiduMap.onResume();    }    @Override    protected void onPause() {        super.onPause();        BaiduMap.onPause();    }    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        switch (requestCode){            case 1:                if (grantResults.length > 0){                    for (int result : grantResults){                        if (result != PackageManager.PERMISSION_GRANTED){                            Toast.makeText(this,"必须同意所有权限才能使用本程序",Toast.LENGTH_SHORT).show();                            finish();                            return;                        }                    }                    requestLocation();                }else {                    Toast.makeText(this,"发生未知错误",Toast.LENGTH_SHORT).show();                    finish();                }                break;                default:        }    }    public class MyLocationListener implements BDLocationListener{        @Override        public void onReceiveLocation(BDLocation bdLocation) {            if (bdLocation.getLocType() == BDLocation.TypeGpsLocation || bdLocation.getLocType() == BDLocation.TypeNetWorkLocation){                navigateTo(bdLocation);            }            StringBuilder currentPosition = new StringBuilder();            currentPosition.append("纬度:").append(bdLocation.getLatitude()).append("\n");            currentPosition.append("经度:").append(bdLocation.getLongitude()).append("\n");            currentPosition.append("国家:").append(bdLocation.getCountry()).append("\n");            currentPosition.append("省:").append(bdLocation.getProvince()).append("\n");            currentPosition.append("市/县:").append(bdLocation.getCity()).append("\n");            currentPosition.append("区/乡:").append(bdLocation.getDistrict()).append("\n");            currentPosition.append("街道/村:").append(bdLocation.getStreet()).append("\n");            currentPosition.append("定位方式:");            if (bdLocation.getLocType() == BDLocation.TypeGpsLocation){                currentPosition.append("GPS");            }else if (bdLocation.getLocType() == BDLocation.TypeNetWorkLocation){                currentPosition.append("网络");            }            Position.setText(currentPosition);        }    }}

更多相关文章

  1. 箭头函数的基础使用
  2. NPM 和webpack 的基础使用
  3. Python list sort方法的具体使用
  4. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  5. Android(安卓)Oreo 可下载字体
  6. android使用aidl实现进程间通信
  7. 使用c#开发的第一款APP的Android浏览器(创世纪篇)
  8. 【Android笔记】Android(安卓)使用高德SDK获取定位
  9. Android(安卓)序列化之parcelable的简单使用

随机推荐

  1. sql语句优化之用EXISTS替代IN、用NOT EXI
  2. 推荐SQL Server 重新恢复自动编号列的序
  3. sql server中datetime字段去除时间的语句
  4. 在SQL中使用convert函数进行日期的查询的
  5. mssql中得到当天数据的语句
  6. [js]javascript与剪贴板交互
  7. mssql server .ldf和.mdf的文件附加数据
  8. 请问在mssql“SQL事件探查器”里表格的标
  9. mssql server 存储过程里,bulk insert tab
  10. 非常详细的SQL--JOIN之完全用法