在高德开放平台上下载地图的sdk和定位的sdk,解压jar包
将.jar文件复制到libs下面,如果是3D地图,需要将在main下面新jniLibs,将.jar文件以外的都复制到jniLibs里面,并且右键add 添加依赖库
清单文件中加入权限
<!--允许程序打开网络套接字-->
<uses-permission android:name="android.permission.INTERNET" />
<!--允许程序设置内置sd卡的写权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--允许程序获取网络状态-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_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.ACCESS_COARSE_LOCATION"></uses-permission>
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!--用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></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>
application里面
<service android:name="com.amap.api.location.APSService"></service>
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="AppKey值"/>
activity_main
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<Button
android:text="标准地图"
android:id="@+id/biaozhun"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:text="卫星地图"
android:id="@+id/weixing"
android:layout_width="80dp"
android:layout_height="wrap_content" />
<Button
android:text="夜间模式"
android:id="@+id/yejian"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<com.amap.api.maps.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="5">
</com.amap.api.maps.MapView>
<TextView
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:id="@+id/textview"
android:text="Hello World!" />
</LinearLayout>
MainActivity
import android.annotation.TargetApi;
import android.graphics.BitmapFactory;
import android.icu.text.SimpleDateFormat;
import android.provider.SyncStateContract;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.maps.AMap;
import com.amap.api.maps.MapView;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.Marker;
import com.amap.api.maps.model.MarkerOptions;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
//声明AMapLocationClient类对象
public AMapLocationClient mLocationClient;
private AMap aMap;
//声明AMapLocationClientOption对象
public AMapLocationClientOption aMapLocationClientOption;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button biaozhun = (Button) findViewById(R.id.biaozhun);
Button weixing = (Button) findViewById(R.id.weixing);
Button yejian = (Button) findViewById(R.id.yejian);
textView = (TextView) findViewById(R.id.textview);
//三个按钮的点击事件
biaozhun.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
aMap.setMapType(AMap.MAP_TYPE_NORMAL);//正常模式
}
});
weixing.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
aMap.setMapType(AMap.MAP_TYPE_SATELLITE);//卫星地图模式
}
});
yejian.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
aMap.setMapType(AMap.MAP_TYPE_NIGHT);//夜间模式
}
});
MapView mapView = (MapView) findViewById(R.id.map);//找到地图控件
//在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
mapView.onCreate(savedInstanceState);
//初始化地图控制器对象
aMap = mapView.getMap();
aMap.setMapType(AMap.MAP_TYPE_NORMAL);//正常模式
LatLng latLng = new LatLng(39.906901,116.397972);
final Marker marker = aMap.addMarker(new MarkerOptions().position(latLng).title("北京").snippet("DefaultMarker"));
marker.setIcon(BitmapDescriptorFactory.fromBitmap(BitmapFactory
.decodeResource(getResources(),R.mipmap.ic_launcher)));
//-----以上是地图,以下是定位
//设置定位回调监听
Start();
}
public void Start(){
Log.i("----------------","nisadsadasd");
mLocationClient = new AMapLocationClient(getApplicationContext());
aMapLocationClientOption = new AMapLocationClientOption();
aMapLocationClientOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
aMapLocationClientOption.setOnceLocation(true);
aMapLocationClientOption.setOnceLocationLatest(true);
aMapLocationClientOption.setNeedAddress(true);
aMapLocationClientOption.setMockEnable(true);
mLocationClient.setLocationOption(aMapLocationClientOption);
//启动定位
mLocationClient.startLocation();
mLocationClient.setLocationListener(new AMapLocationListener() {
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
if (aMapLocation != null) {
if (aMapLocation.getErrorCode() == 0) {
// textView.setText(aMapLocation.getAddress());
textView.setText(aMapLocation.getLongitude()+" ,"+aMapLocation.getLatitude());
Log.i("------------",aMapLocation.getAddress());
}else {
//定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
Log.e("AmapError","location Error, ErrCode:"
+ aMapLocation.getErrorCode() + ", errInfo:"
+ aMapLocation.getErrorInfo());
}
}
}
});
}
}