百度地图api获取经纬度

百度api,安卓,经纬度,AS,java11、sdk28,下面有代码

1、开干

登录百度官网获取jar包,直接拉他代码跑一遍,因为我只是需要单纯获取经纬度,所以拿最简单的

SDK下载 - 百度LBS开放平台

注:如果擅长的拿开发包就能搞,不擅长的像我这种小菜鸡,先烤他示例代码跑一遍,主要就是了解他那些jar包怎么放和怎么调用

接下来是我照猫画虎了,换个芝士继续干

2、我的项目:

2.1、libs没有就新建,然后百度的示例项目jar丢到里面就行,然后到app项目下的gradle引用库

2.2、然后去清单列表加上;

2.3、权限清单我懒得整理了,都是百度示例的,下面再贴

2.4:AK(Android key鉴权)获取

参考大佬的:
2.4.1

Android如何实现地图定位?Android studio+百度地图API+Android6.0系统实现地图显示、地址设置、点击地图定位功能(详细)_android studio百度地图开发-CSDN博客

2.4.2
但是我那个这么sha1不对,报错:百度地图api result = {“status“:230,“message“:“APP Mcode码校验失败“,然后再选择第二种思路就能成功了:
百度导航SDK APP Mcode码校验失败解决方案-CSDN博客

这个需要做成apk,需要可参考:Android Studio 打包APK(详细版)_as打包apk-CSDN博客

3、思路就是这样,接下来上代码:

import android.app.Application;
import android.app.Service;
import android.os.Vibrator;

import com.baidu.mapapi.CoordType;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.common.BaiduMapSDKException;

/**
 * 主Application,所有百度定位SDK的接口说明请参考线上文档:http://developer.baidu.com/map/loc_refer/index.html
 * <p>
 * 百度定位SDK官方网站:http://developer.baidu.com/map/index.php?title=android-locsdk
 * <p>
 * 直接拷贝com.baidu.location.service包到自己的工程下,简单配置即可获取定位结果,也可以根据demo内容自行封装
 */
public class LocationApplication extends Application {
    public Vibrator mVibrator;

    @Override
    public void onCreate() {
        super.onCreate();

        // 默认本地个性化地图初始化方法
        SDKInitializer.setAgreePrivacy(this, true);
        try {
            SDKInitializer.initialize(this);
        } catch (BaiduMapSDKException e) {
            e.printStackTrace();
        }
        SDKInitializer.setCoordType(CoordType.BD09LL);

        mVibrator = (Vibrator) getApplicationContext().getSystemService(Service.VIBRATOR_SERVICE);
    }
}
public class MainActivity extends AppCompatActivity {
    public LocationClient mLocationClient = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 申请网络访问,没有这句不行的
        LocationClient.setAgreePrivacy(true);

        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_main);
        try {
            mLocationClient = new LocationClient(getApplicationContext());     //声明LocationClient类
        } catch (Exception e) {
            e.printStackTrace();
        }

        initLocation();
        mLocationClient.registerLocationListener(new MyLocationListener());

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mLocationClient.start();
    }

    @Override
    protected void onPause() {
        super.onPause();
    }

    private void initLocation() {
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy
        );//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
        option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系
        int span = 1000;
        option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
        option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
        option.setOpenGps(true);//可选,默认false,设置是否使用gps
        option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
        option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
        option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
        option.setIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
        option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集
        option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要
        mLocationClient.setLocOption(option);
    }

    public class MyLocationListener implements BDLocationListener {

        @Override
        public void onReceiveLocation(BDLocation location) {
            System.out.println(location.getLatitude());
            System.out.println(location.getLongitude());
            mLocationClient.stop();
        }

    }
}
activity_main.xml



<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <com.baidu.mapapi.map.MapView
        android:id="@+id/bmapView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/bmapView"
        android:layout_alignParentBottom="true"
        android:text="按下这个按钮" />
</RelativeLayout>
AndroidManifest.xml


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.baidu.baidulocationdemo">

    <!-- 这个权限用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!-- 这个权限用于访问GPS定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!-- 访问网络,网络定位需要上网 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 允许挂载和反挂载文件系统可移动存储 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <!-- 允许程序读取底层系统日志文件 -->
    <uses-permission android:name="android.permission.READ_LOGS" />
    <!-- 允许访问振动设备 -->
    <uses-permission android:name="android.permission.VIBRATE" />
    <!-- 允许使用PowerManager的 WakeLocks保持进程在休眠时从屏幕消失 -->
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <!-- 允许程序读取或写入系统设置 -->
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <!-- android 9.0上使用前台服务,需要添加权限 -->
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <!-- 用于读取手机当前的状态 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!-- 读取缓存数据 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <!-- 获取模拟定位信息 -->
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />


    <application
        android:name="com.baidu.location.demo.LocationApplication"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">

        <!-- 声明service组件 -->
        <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" />
        <!-- AK鉴权 -->
        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="LDvSUJq1r6pIH0BBm3sxmtltwzhzsulv" /> <!-- http://lbsyun.baidu.com/apiconsole/key -->
        <activity
            android:name="com.baidu.location.demo.MainActivity"
            android:exported="true"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
app下的build.gradle




apply plugin: 'com.android.application'

android {

    compileSdkVersion 31

    defaultConfig {
        applicationId "com.baidu.baidulocationdemo"
        minSdkVersion 16
        targetSdkVersion 31
        versionCode 1
        versionName "1.0"
    }

    lintOptions {
        abortOnError false
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
}

dependencies {
    implementation files('libs/BaiduLBS_Android.jar')
    //noinspection GradleCompatible
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.squareup.okhttp3:okhttp:3.13.1' // 从定位SDK9.5.2开始,需要加上okhttp库依赖
}

完结,撒花❀❀❀❀❀❀❀❀❀❀❀❀

需要demo的话我可以贴到百度网盘,开源是一种精神,也是理工男的浪漫。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值