总目录:
- 开发步骤
- 开发代码
应需求,使用高德地图的sdk开发了一个简易的地图APP,功能很简单,输入经度纬度就可以查看到该位置。
免费获取此应用:https://pan.baidu.com/s/1hWjMN8SwRAcmV6CUaTP4dQ 密码:mfss
注:通过经度纬度查看地图,需要输入准确的经纬度(精确到小数点后六七位),否则你查看到的地图会有很大偏差。
开发步骤
开发总耗时用了不到一天,主要耗时在使用高德地图官方的sdk。。。
##开发步骤
开发环境:AndroidStudio
- 创建一个项目
- 申请高德地图的key(https://lbs.amap.com/dev/key/app)
- 在项目里集成SDK(官方给出的步骤:https://lbs.amap.com/api/android-location-sdk/guide/create-project/android-studio-create-project)
- 方法一:将下载的定位 SDK jar 文件复制到工程
- 方法二:通过Gradle集成SDK,即添加相关的依赖(此项目采用的这种方法)
- 配置 AndroidManifest.xml 文件
- 在AndroidManifest.xml的application标签中配置Key
- 在application标签中声明service组件
- 在AndroidManifest.xml中配置权限
- 编写主程序的代码
代码:
(app路径下的)build.gradle添加依赖
implementation 'com.amap.api:3dmap:latest.integration'
implementation 'com.amap.api:location:latest.integration'
在AndroidManifest.xml的application标签中配置Key
<meta-data android:name="com.amap.api.v2.apikey"
android:value="你自己的key你自己的key你自己的key">
</meta-data>
在AndroidManifest.xmlapplication标签中声明service组件
<service android:name="com.amap.api.location.APSService"></service>
在AndroidManifest.xml中配置权限
<!--用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!--获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!--这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!--用于访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<!--用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!--写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!--用于申请调用A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
<!--用于申请获取蓝牙信息进行室内定位-->
<uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>
主程序代码(布局忽略)
//经度纬度写反了。。。
public class MainActivity extends AppCompatActivity {
private Button btnFind;
private EditText edtJingdu;
private EditText edtWeidu;
private MapView mapView;
private AMap aMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
mapView = (MapView) findViewById(R.id.map);
mapView.onCreate(savedInstanceState);//必须要写
init();
}
private void initView() {
btnFind = findViewById(R.id.btn_find);
edtJingdu = findViewById(R.id.edt_jingdu);
edtWeidu = findViewById(R.id.edt_weidu);
btnFind.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String jingdu = edtJingdu.getText().toString();
String weidu = edtWeidu.getText().toString();
// aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(34.341568, 108.940174), 18));//显示指定的地点
// aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(Double.valueOf(jingdu), Double.valueOf(weidu)), 18));//点击按钮跳转到指定的地点
// LatLng latLng = new LatLng(39.906901,116.397972);//地点经纬度
LatLng latLng = new LatLng(Double.valueOf(jingdu), Double.valueOf(weidu));
final Marker marker = aMap.addMarker(new MarkerOptions().position(latLng).title("北京").snippet("DefaultMarker"));
aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 18));
}
});
}
/**
* 初始化AMap对象
*/
private void init() {
if (aMap == null) {
aMap = mapView.getMap();
}
}
/**
* 方法必须重写
*/
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
/**
* 方法必须重写
*/
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
/**
* 方法必须重写
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
/**
* 方法必须重写
*/
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
}