任务目标
根据百度开发者文档,编写百度地图定位程序,在地图上标出自己现在的位置。
实验截图
使用百度地图SDK
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.example.mymap"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" > </service> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="your key" /> </application> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> //获取设备网络状态,禁用后无法获取网络状态 <uses-permission android:name="android.permission.INTERNET"/> //网络权限,当禁用后,无法进行检索等相关业务 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> //读取设备硬件信息,统计数据 <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> //读取系统信息,包含系统版本等信息,用作统计 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> //获取设备的网络状态,鉴权所需网络代理 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> //允许sd卡写权限,需写入地图数据,禁用后无法显示地图 <uses-permission android:name="android.permission.WRITE_SETTINGS" tools:ignore="ProtectedPermissions" /> //获取统计数据 <uses-permission android:name="android.permission.CAMERA" /> //使用步行AR导航,配置Camera权限 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
</manifest>
|
注意:[your key]部分需要替换成百度地图申请SDK应用的key,另外还需下载功能定制化开发包,选中“全量定位”、“基础地图”、“检索功能”、“LBS”、”计算工具”。
一些其他的代码
动态请求权限
@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(); } }
|
定义内置监听器类
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); } } }
|
界面布局
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#e0000000" android:orientation="vertical" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="12dp" android:layout_marginTop="20dp" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="纬度:" android:textColor="#ffffff" android:textSize="15dp" /> <TextView android:id="@+id/tv_Lat" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" android:textColor="#ffffff" android:textSize="15dp" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="12dp" android:layout_marginTop="10dp" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="经度:" android:textColor="#ffffff" android:textSize="15dp" /> <TextView android:id="@+id/tv_Lon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" android:textColor="#ffffff" android:textSize="15dp" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:layout_marginLeft="12dp" android:layout_marginTop="10dp" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="地址:" android:textColor="#ffffff" android:textSize="15dp" />
<TextView android:id="@+id/tv_Add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" android:textColor="#ffffff" android:textSize="15dp" /> </LinearLayout> </LinearLayout> </FrameLayout>
|
学习经历
使用模拟器获取不到地理位置,需要使用手机连接电脑进行调试。
需要配置手机的USB模式:进入设置界面,进入开发者模式(一般是连点手机型号),进入开发者选项,开启USB调试模式
申请百度地图的SDK应用时需要获取SHA1值和项目包名,可以根据教程来获得
项目原始代码
请戳这里α->Lkuf