定位的实现。
public LocationClient mLocationClient; //定位客户端 TextView tv_positionText; //显示定位信息控件
定位(百度api)
//如果没有定位权限,动态请求用户允许使用该权限 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) { 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(); //开始定位 } @Override protected void onDestroy() { super.onDestroy(); mLocationClient.stop(); } private void initLocation() { setContentView(R.layout.twtb); mLocationClient = new LocationClient(getApplicationContext()); mLocationClient.registerLocationListener(new MyLocationListener()); tv_positionText = findViewById(R.id.tv_positionText); //定位客户端操作 LocationClientOption option = new LocationClientOption(); //设置扫描时间间隔(单位:毫秒) option.setScanSpan(1000); //设置定位模式,三选一 option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); /*option.setLocationMode(LocationClientOption.LocationMode.Battery_Saving); option.setLocationMode(LocationClientOption.LocationMode.Device_Sensors);*/ //设置需要地址信息 option.setIsNeedAddress(true); //保存定位参数 mLocationClient.setLocOption(option); } class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation bdLocation) { StringBuffer currentPosition = new StringBuffer(); currentPosition.append(bdLocation.getAddrStr()); tv_positionText.setText(currentPosition); } }
权限
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.baidumap"></manifest> <!-- 这个权限用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> <!-- 这个权限用于访问GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <!-- 获取运营商信息,用于支持提供运营商信息相关的接口--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <!-- 访问网络,网络定位需要上网--> <uses-permission android:name="android.permission.INTERNET"></uses-permission>