这次的任务是根据百度的官方文档开发必读地图定位APP,这次主要参考的是文档以及(17条消息) 超详细的Android百度地图开发:在APP上定位并显示出来_追-CSDN博客_android百度地图定位开发。 首先注册账号,然后申请创建应用,申请API KEY。
![H4Q01GW92DZS)SV5DGGYN1.png 分布开发版SHA1在这个位置。
lbsyun.baidu.com/index.php?t… 然后下载所需要的百度地图SDK。将相关文件放入创建的项目对应的目录。
主要代码: AndroidManifest.xml文件
<!-- 读写sd卡 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 写sd卡 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_GPS" />
<!-- 获取精确gps位置 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 获取粗略位置 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 允许程序访问额外的定位提供者指令获取模拟定位信息 -->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<!-- 网络链接 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 获取网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 更改wifi连状态 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 获取wifi状态 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--允许程序读写手机状态和身份-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
<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">
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="填写刚申请的API_KEY" />
<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>
</application>
activity_main.xml文件
MainActivity文件
package com.example.lbstest;
import android.Manifest; import android.content.pm.PackageManager; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; import android.widget.Toast;
import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption;
import java.util.ArrayList; import java.util.List;
public class MainActivity extends AppCompatActivity {
public LocationClient mLocationClient;
//private MapView mapview;
private TextView positionText;
private StringBuilder currentPosition;
public MainActivity() {
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLocationClient = new LocationClient((getApplicationContext()));
mLocationClient.registerNotifyLocationListener(new MyLocationListener());
setContentView(R.layout.activity_main);
positionText = (TextView)findViewById(R.id.position_text_view);
List<String> permissionList = new ArrayList<>();
//如果没有启动下面权限,就询问用户让用户打开
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();
}
}
/初始化函数,并启动位置客户端LocationClient/ private void requestLocation() { initLocation(); mLocationClient.start(); }
/初始化函数/ private void initLocation() { LocationClientOption option = new LocationClientOption(); option.setScanSpan(5000); mLocationClient.setLocOption(option); }
/只有同意打开相关权限才可以开启本程序/ @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(final BDLocation location) { runOnUiThread(new Runnable() { @Override public void run() { currentPosition = new StringBuilder(); currentPosition.append("纬度:").append(location.getLatitude()).append("\n"); currentPosition.append("经度:").append(location.getLongitude()).append("\n"); currentPosition.append("定位方式:"); if (location.getLocType() == BDLocation.TypeGpsLocation) { currentPosition.append("GPS"); } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) { currentPosition.append("网络"); } positionText.setText(currentPosition); } }); } }
public void onConnectHotSpotMessage(String s, int i) {
}
@Override
protected void onDestroy(){
super.onDestroy();
mLocationClient.stop();
}
}
这次主要学习了如何开发百度地图的APP,主要遇到了package android.support.annotation等几个包不存在的问题也成功解决了。这次简易的地图应用的开发锻炼了能力,为日后更难的项目奠定了基础。