• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Android基础:百度SDK使用 | 带

武飞扬头像
Qricis
帮助1

百度SDK

  • 首先从百度地图官网lbs下载需要的功能包,然后将之放进对应的文件夹里
  • 其次,在xml里申请需要用到的权限
  • manifest
  1.  
    <!--申请权限-->
  2.  
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
  3.  
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
  4.  
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  5.  
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
  6.  
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
  7.  
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  8.  
    <uses-permission android:name="android.permission.INTERNET"/>
  9.  
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
  10.  
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
  11.  
     
  12.  
    <application
  13.  
    android:allowBackup="true"
  14.  
    android:icon="@mipmap/ic_launcher"
  15.  
    android:label="@string/app_name"
  16.  
    android:roundIcon="@mipmap/ic_launcher_round"
  17.  
    android:supportsRtl="true"
  18.  
    android:theme="@style/AppTheme">
  19.  
    <!--添加meta-data标签,name属性是固定的,value是我们创建时百度生成的-->
  20.  
    <meta-data
  21.  
    android:name="com.百度.lbsapi.API_KEY"
  22.  
    android:value="D1LCt49XRl4w3GlLXvSo8BEzX6VICo7v"/>
  23.  
     
  24.  
    <activity android:name=".MainActivity">
  25.  
    <intent-filter>
  26.  
    <action android:name="android.intent.action.MAIN" />
  27.  
     
  28.  
    <category android:name="android.intent.category.LAUNCHER" />
  29.  
    </intent-filter>
  30.  
    </activity>
  31.  
     
  32.  
    <!--注册一个LBS SDK服务-->
  33.  
    <service android:name="com.百度.location.f"
  34.  
    android:enabled="true"
  35.  
    android:process=":remote"/>
  36.  
    </application>
学新通
  • activity_main
  1.  
    <TextView
  2.  
    android:id="@ id/position_text_view"
  3.  
    android:layout_width="wrap_content"
  4.  
    android:layout_height="wrap_content"
  5.  
    android:visibility="gone"
  6.  
    app:layout_constraintBottom_toBottomOf="parent"
  7.  
    app:layout_constraintHorizontal_bias="0.204"
  8.  
    app:layout_constraintLeft_toLeftOf="parent"
  9.  
    app:layout_constraintRight_toRightOf="parent"
  10.  
    app:layout_constraintTop_toTopOf="parent"
  11.  
    app:layout_constraintVertical_bias="0.044" />
  12.  
     
  13.  
    <com.百度.mapapi.map.MapView
  14.  
    android:id="@ id/bmapView"
  15.  
    android:layout_width="match_parent"
  16.  
    android:layout_height="match_parent"
  17.  
    android:clickable="true"
  18.  
    app:layout_constraintBottom_toBottomOf="parent"
  19.  
    app:layout_constraintEnd_toEndOf="parent"
  20.  
    app:layout_constraintStart_toStartOf="parent"
  21.  
    app:layout_constraintTop_toTopOf="parent" />
学新通
  • MainActivity
  1.  
    public class MainActivity extends AppCompatActivity {
  2.  
     
  3.  
    // 创建一个LocationClient实例
  4.  
    public LocationClient mLocationClient;
  5.  
     
  6.  
    private TextView positionText;
  7.  
     
  8.  
    private MapView mMapView;
  9.  
     
  10.  
    // 创建一个地图控制器,为显示所处位置做准备
  11.  
    private BaiduMap mBaiduMap;
  12.  
    private boolean isFirstLocate = true;
  13.  
     
  14.  
    @Override
  15.  
    protected void onCreate(Bundle savedInstanceState) {
  16.  
    super.onCreate(savedInstanceState);
  17.  
     
  18.  
    // 接收一个全局context
  19.  
    mLocationClient = new LocationClient(getApplicationContext());
  20.  
    // 注册一个监听器,当获取到位置信息的时候,回调该定位监听器
  21.  
    mLocationClient.registerLocationListener(new MyLocationListener());
  22.  
    // 初始化地图
  23.  
    SDKInitializer.initialize(getApplicationContext());
  24.  
     
  25.  
    setContentView(R.layout.activity_main);
  26.  
     
  27.  
    mMapView = findViewById(R.id.bmapView);
  28.  
     
  29.  
    // 获取BaiduMap实例
  30.  
    mBaiduMap = mMapView.getMap();
  31.  
     
  32.  
    // 获得权限,使光标显示在地图上
  33.  
    mBaiduMap.setMyLocationEnabled(true);
  34.  
     
  35.  
    positionText = findViewById(R.id.position_text_view);
  36.  
    // 创建一个空集合,将需要动态申请的权限,没授权的依次添加进来
  37.  
    List<String> permissionList = new ArrayList<>();
  38.  
     
  39.  
    if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
  40.  
    permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);
  41.  
    }
  42.  
    if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
  43.  
    permissionList.add(Manifest.permission.READ_PHONE_STATE);
  44.  
    }
  45.  
    if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
  46.  
    permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
  47.  
    }
  48.  
     
  49.  
    // 判断集合是否为空,不为空则转换为数组,一次性申请权限
  50.  
    if (!permissionList.isEmpty()) {
  51.  
    String[] permissions = permissionList.toArray(new String[permissionList.size()]);
  52.  
    ActivityCompat.requestPermissions(MainActivity.this,permissions,1);
  53.  
    } else {
  54.  
    requestLocation();
  55.  
    }
  56.  
     
  57.  
    }
  58.  
     
  59.  
    private void requestLocation() {
  60.  
    initLocation();
  61.  
    // 结果回调到监听器
  62.  
    mLocationClient.start();
  63.  
    }
  64.  
     
  65.  
    // 实时更新定位
  66.  
    private void initLocation() {
  67.  
    LocationClientOption option = new LocationClientOption();
  68.  
    // 设定每5秒更新一次定位数据
  69.  
    option.setScanSpan(1000);
  70.  
     
  71.  
    // 设置为百度地图坐标体系,默认gcj02出来的位置误差太大
  72.  
    // WGS-84:是国际标准,GPS坐标(Google Earth使用、或者GPS模块)
  73.  
    // GCJ-02:中国坐标偏移标准,Google Map、高德、腾讯使用
  74.  
    // BD-09:百度坐标偏移标准,Baidu Map使用
  75.  
    option.setCoorType("bd09ll");
  76.  
     
  77.  
    // 设定强制使用GPS定位
  78.  
    //option.setLocationMode(LocationClientOption.LocationMode.Device_Sensors);
  79.  
     
  80.  
    // 获取当前位置的详细信息
  81.  
    option.setIsNeedAddress(true);
  82.  
     
  83.  
    mLocationClient.setLocOption(option);
  84.  
    }
  85.  
     
  86.  
    @Override
  87.  
    protected void onResume() {
  88.  
    super.onResume();
  89.  
    mMapView.onResume();
  90.  
    }
  91.  
     
  92.  
    @Override
  93.  
    protected void onPause() {
  94.  
    super.onPause();
  95.  
    mMapView.onPause();
  96.  
    }
  97.  
     
  98.  
    @Override
  99.  
    protected void onDestroy() {
  100.  
    super.onDestroy();
  101.  
    // 在活动被摧毁时一定要调用该方法停止定位,否则程序会在后台持续定位,消耗手机电量
  102.  
    mLocationClient.stop();
  103.  
    mMapView.onDestroy();
  104.  
    mBaiduMap.setMyLocationEnabled(false);
  105.  
    }
  106.  
     
  107.  
    @Override
  108.  
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
  109.  
    switch (requestCode) {
  110.  
    case 1:
  111.  
    if (grantResults.length > 0) {
  112.  
    for (int result : grantResults) {
  113.  
    if (result != PackageManager.PERMISSION_GRANTED) {
  114.  
    Toast.makeText(this,"必须同意所有权限才能使用本程序",Toast.LENGTH_SHORT).show();
  115.  
    finish();
  116.  
    return;
  117.  
    }
  118.  
    }
  119.  
    requestLocation();
  120.  
    } else {
  121.  
    Toast.makeText(this,"发生未知错误",Toast.LENGTH_SHORT).show();
  122.  
    }
  123.  
    break;
  124.  
    default:
  125.  
    }
  126.  
    }
  127.  
     
  128.  
    // 用于获取当前位置,并更新到地图上
  129.  
    private void navigateTo(BDLocation location) {
  130.  
    if (isFirstLocate) {
  131.  
    LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());
  132.  
    MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);
  133.  
    mBaiduMap.animateMapStatus(update);
  134.  
    // 缩放级别3~19之间,越高越精确
  135.  
    update = MapStatusUpdateFactory.zoomTo(18f);
  136.  
    mBaiduMap.animateMapStatus(update);
  137.  
    isFirstLocate = false;
  138.  
    }
  139.  
     
  140.  
    // 设置显示我在地图上的光标信息
  141.  
    MyLocationData.Builder locationBuilder = new MyLocationData.Builder();
  142.  
    locationBuilder.latitude(location.getLatitude());
  143.  
    locationBuilder.longitude(location.getLongitude());
  144.  
    MyLocationData locationData = locationBuilder.build();
  145.  
    mBaiduMap.setMyLocationData(locationData);
  146.  
     
  147.  
    }
  148.  
     
  149.  
    public class MyLocationListener implements BDLocationListener {
  150.  
     
  151.  
    @Override
  152.  
    public void onReceiveLocation(BDLocation bdLocation) {
  153.  
     
  154.  
    // 用于判断是不是第一次定位
  155.  
    if (bdLocation.getLocType() == BDLocation.TypeGpsLocation || bdLocation.getLocType() == BDLocation.TypeNetWorkLocation){
  156.  
    navigateTo(bdLocation);
  157.  
    }
  158.  
     
  159.  
    StringBuilder currentPosition = new StringBuilder();
  160.  
    currentPosition.append("纬度: ").append(bdLocation.getLatitude()).append("
  161.  
    ");
  162.  
    currentPosition.append("经度: ").append(bdLocation.getLongitude()).append("
  163.  
    ");
  164.  
    currentPosition.append("国家: ").append(bdLocation.getCountry()).append("
  165.  
    ");
  166.  
    currentPosition.append("省: ").append(bdLocation.getProvince()).append("
  167.  
    ");
  168.  
    currentPosition.append("市: ").append(bdLocation.getCity()).append("
  169.  
    ");
  170.  
    currentPosition.append("区: ").append(bdLocation.getDistrict()).append("
  171.  
    ");
  172.  
    currentPosition.append("街道: ").append(bdLocation.getStreet()).append("
  173.  
    ");
  174.  
    currentPosition.append("定位方式: ");
  175.  
    if (bdLocation.getLocType() == BDLocation.TypeGpsLocation) {
  176.  
    currentPosition.append("GPS");
  177.  
    } else if (bdLocation.getLocType() == BDLocation.TypeNetWorkLocation) {
  178.  
    currentPosition.append("网络");
  179.  
    }
  180.  
     
  181.  
    positionText.setText(currentPosition);
  182.  
     
  183.  
    }
  184.  
    }
  185.  
    }
学新通
  • 下载地址

https://github.com/qricis/DoSomeAndroidTest/tree/main/LBSTest

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgceabh
系列文章
更多 icon
同类精品
更多 icon
继续加载