您的位置:首页 > 移动开发 > Android开发

Android Studio中找到项目的密匙数字证书(MD5和SHA1)配置高德地图Android地图SDK【高德地图使用】

2016-09-17 11:30 603 查看
1.Android Studio中找到密匙数字证书(MD5和SHA1)

2.Android Studio中配置高德地图Android地图SDK

3.Android Studio中实现高德地图的使用【标记,以标记为中心显示地图,app中调用高德地图进行导航】

4.Android Studio打包relase版APK时(签名),需在配置地图中使用签名文件(.jks)的SHA1。

要领:

一、找数字证书步骤:

1.点Android Studio右侧的gradle

2.点击栏目上的刷新图标

3.点击":app" → “Tasks” → “android” → “signingReport”



二、Android studio中配置高德地图的Android地图SDK

步骤如下:【这里只用了3D地图】

1.下载高德地图Android地图SDK(去高德官方下载



2.解压后得到下图中的1个文件夹和1个jar文件



3.将jar文件复制到项目app下的libs(作为libs的下一级文件)

4.在src下面的main目录上右键new → Directory → 起名为“jniLibs”【必须这么取名】,之后将解压得到的armeabi整个复制到jniLibs下,层级结构见下图:





高德地图的简单使用【第三方app调出高德地图进行导航】

<span style="font-size:14px;">import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.animation.Animation;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.amap.api.maps.AMap;
import com.amap.api.maps.AMapOptions;
import com.amap.api.maps.CameraUpdate;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.LocationSource;
import com.amap.api.maps.MapView;
import com.amap.api.maps.UiSettings;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.CameraPosition;
import com.amap.api.maps.model.Circle;
import com.amap.api.maps.model.CircleOptions;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.Marker;
import com.amap.api.maps.model.MarkerOptions;

import java.io.File;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

import static android.R.id.progress;

/**
* 获取地址对应的(纬度,经度)
* 【地址转坐标】
* 以标记点为中心显示地图
* 点击标记点弹出提示框【确认进入手机地图进行导航】
*/
public class LocalInfoActivity extends AppCompatActivity {
@BindView(R.id.et_localinfo)
EditText etLocalinfo;
@BindView(R.id.tv_localinfo)
TextView tvLocalinfo;
private MapView mMapView = null;
private UiSettings uiSettings;//用于设置地图显示信息
private AMap aMap;//定义一个地图对象
private LatLng latLng;//地图坐标点(纬度,经度)
private Marker marker;//地图标记
private MarkerOptions markerOptions;//标记配置

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_local_info);
ButterKnife.bind(this);
showMap(savedInstanceState);//显示地图
initMapOptions();//配置地图信息
showMapFromLatlang();//以新的坐标点为中心显示地图
addAMark();//添加坐标对应标记【添加标记点击事件】
drawACircle();//绘制一个圆饼
}

/**
* 显示出地图
*/
private void showMap(Bundle savedInstanceState) {
//获取地图控件引用
mMapView = (MapView) findViewById(R.id.map_localinfo);
//在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),实现地图生命周期管理
mMapView.onCreate(savedInstanceState);//到这里地图就可以显示出来【需实现生命周期的管理如下生命周期】
}

/**
* 配置地图信息
* “+ -”号是否可用【是否显示】
* 指南针是否显示
* 默认定位按钮
* 缩放比例和高德地图Logo
* 旋转手势不可用
* 设置定位监听
*/
private void initMapOptions() {
latLng = new LatLng(30.670000,104.060000);//实例化地图坐标点
aMap = mMapView.getMap();
uiSettings = aMap.getUiSettings();
uiSettings.setScaleControlsEnabled(true);//显示比例尺控件
uiSettings.setZoomControlsEnabled(true);//设施“+ -”是否可以用来控制地图放大倍数
uiSettings.setCompassEnabled(true);//控制指南针是否显示
uiSettings.setMyLocationButtonEnabled(true); // 显示默认的定位按钮
uiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_LEFT);//设置logo位置【左下角】
uiSettings.setRotateGesturesEnabled(false);//设置旋转手势——不能通过手势来旋转地图
//        /**
//         * 定位监听,这里没用到
//         */
//        aMap.setLocationSource(new LocationSource() {//设置定位监听
//            @Override
//            public void activate(OnLocationChangedListener onLocationChangedListener) {
//            }
//            @Override
//            public void deactivate() {
//            }
//        });// 设置定位监听
//        aMap.setMyLocationEnabled(true);// 可触发定位并显示定位层
}
/**
* 设置新的中心点
* 新的缩放级别【aMap.moveCamera(CameraUpdateFactory.zoomTo(17));//将地图的缩放级别调整到17级】
*/
private void showMapFromLatlang() {
CameraUpdate cameraupdate = CameraUpdateFactory.newCameraPosition(new CameraPosition(
latLng,//新的中心点坐标
16, //新的缩放级别
30, //俯仰角0°~45°(垂直与地图时为0)
4000

0  ////偏航角 0~360° (正北方为0)
));
aMap.moveCamera(cameraupdate);//将显示地图移动到新的中心点来显示
}

/**
* 在一个坐标上添加标记<span style="white-space:pre">	</span>//清除标记点用aMap.clear()
*/
private void addAMark() {
markerOptions = new MarkerOptions();
markerOptions.position(latLng);//设置纬度,经度
markerOptions.title("成都");//标题
markerOptions.draggable(true);//标记可拖动【拖动失败】
markerOptions.visible(true);//点标记是否可见
markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker_nomal));//设置标记图标
marker = aMap.addMarker(markerOptions); //获得标记对象(需要使用aMap将标记配置添加到地图后才能生成对应的标记对象)
marker.setRotateAngle(0);//设置倾斜度数(0-360[正负])
/**
* 添加标注点击事件【弹出框确认后进入高德地图导航】
*/
aMap.setOnMarkerClickListener(new AMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
AlertDialog dialog = new AlertDialog.Builder(LocalInfoActivity.this)
.setTitle("系统提示")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//判断是否已安装高德地图app
if(isInstallByRead("com.autonavi.minimap")){
//下方传入的坐标值需改为你想要去的地方的坐标
goToNaviActivity(LocalInfoActivity.this,"test",null,"30.670000","104.060000","1","2");
}else{
Toast.makeText(LocalInfoActivity.this,"请先安装高德地图app",Toast.LENGTH_SHORT).show();
}
}
})
.setNegativeButton("取消",null)
.setMessage("是否启动高德地图进行导航?")
.show();
return true;
}
});
}

/**
* 以坐标点为中心画一个圆饼
*/
private void drawACircle() {
aMap.addCircle(new CircleOptions().
center(latLng).
radius(200).//范围200米
fillColor(Color.argb(progress, 1, 1, 1))//填充色
.strokeColor(Color.argb(progress, 1, 1, 1))//边框色
.strokeWidth(15));
}

@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
}

@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView.onResume (),实现地图生命周期管理
mMapView.onResume();
}

@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView.onPause (),实现地图生命周期管理
mMapView.onPause();
}

@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),实现地图生命周期管理
mMapView.onSaveInstanceState(outState);
}

@OnClick(R.id.btn_localinfo)
public void onClick() {

}

/**
* 配置导航的信息【调用手机已安装的高德地图】
* @param context
* @param sourceApplication 必填 第三方调用应用名称。如 amap
* @param poiname
* @param lat 必填 纬度
* @param lon 必填 经度
* @param dev 必填 是否偏移(0:lat 和 lon 是已经加密后的,不需要国测加密; 1:需要国测加密)
* @param style 必填 导航方式(0 速度快; 1 费用少; 2 路程短; 3 不走高速;4 躲避拥堵;5 不走高速且避免收费;6 不走高速且躲避拥堵;7 躲避收费和拥堵;8 不走高速躲避收费和拥堵))
*/
public static  void goToNaviActivity(Context context, String sourceApplication , String poiname , String lat , String lon , String dev , String style){
StringBuffer stringBuffer  = new StringBuffer("androidamap://navi?sourceApplication=")
.append(sourceApplication);
if (!TextUtils.isEmpty(poiname)){
stringBuffer.append("&poiname=").append(poiname);
}
stringBuffer.append("&lat=").append(lat)
.append("&lon=").append(lon)
.append("&dev=").append(dev)
.append("&style=").append(style);

Intent intent = new Intent("android.intent.action.VIEW", android.net.Uri.parse(stringBuffer.toString()));
intent.setPackage("com.autonavi.minimap");
context.startActivity(intent);
}

/**
* 根据包名检测某个APP是否安装
*
* @param packageName 包名
* @return true 安装 false 没有安装
*/
public static boolean isInstallByRead(String packageName) {
return new File("/data/data/" + packageName).exists();
}
}</span><span style="font-size: 24px;">
</span>
高德地图定位:【注意权限】
配置服务:

<service android:name="com.amap.api.location.APSService"></service>
配置定位:
//定位【获取当前位置坐标(纬度,经度)】
private void getLoacation() {
mlocationClient = new AMapLocationClient(this);
//初始化定位参数
mLocationOption = new AMapLocationClientOption();
//设置定位监听
mlocationClient.setLocationListener(this);
//设置定位模式为Hight_Accuracy高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//设置定位间隔,单位毫秒,默认为2000ms
mLocationOption.setInterval(2000);
//设置定位参数
mlocationClient.setLocationOption(mLocationOption);
Log.e("---------","定位中...");
//启动定位
mlocationClient.startLocation();

}
//定位监听
@Override
public void onLocationChanged(AMapLocation amapLocation) {
Log.e("------","定位成功");
if (amapLocation != null) {
if (amapLocation.getErrorCode() == 0) {
//定位成功回调信息,设置相关消息
amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表
double lat = amapLocation.getLatitude();//获取纬度
double lon = amapLocation.getLongitude();//获取经度
Log.e("------","("+lat+":"+lon+")");
amapLocation.getAccuracy();//获取精度信息
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(amapLocation.getTime());
df.format(date);//定位时间
} else {
//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
Log.e("------AmapError", "location Error, ErrCode:"
+ amapLocation.getErrorCode() + ", errInfo:"
+ amapLocation.getErrorInfo());
}
}
}

调用百度地图进行导航:

/**
* 调用百度地图导航
* 使用百度地图导航需注意:需要传入出发点的名字|坐标
*/
public void goToBaiduMap(Context context) {
/**
* 查看下面网址有详细的使用说明
* http://developer.baidu.com/map/uri-intro.htm#idmykey37 */
//调起百度PC或Web地图,展示“西安市”从(lat:34.264642646862,lng:108.95108518068 )“我家”到“大雁塔”的驾车路线。
String gole = "intent://map/direction?" +
"origin=latlng:30.670000,104.060000|name:我的坐标" +//传入自己的坐标【这里是模拟坐标】name属性不要好像会不开启导航
"&destination=天府广场" +   //目的地名称
"&mode=driving®ion=成都市" +    //所在城市
"&referer=Autohome" +   //
"|GasStation#Intent;" +     //
"scheme=bdapp;" +       //固定为bdapp
"package=com.baidu.BaiduMap;" +     //百度包
"end";//结束标志
try {
Intent intent = Intent.getIntent(gole);
context.startActivity(intent);
} catch (URISyntaxException e) {
e.printStackTrace();
}
}

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:id="@+id/activity_local_info"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.liu.ditu.LocalInfoActivity">
<com.amap.api.maps.MapView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/map_localinfo"
></com.amap.api.maps.MapView>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_weight="1"
android:textSize="20sp"
android:layout_marginLeft="50dp"
android:layout_gravity="center_vertical"
android:id="@+id/et_localinfo"/>
<Button
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/btn_localinfo"
android:layout_gravity="center_vertical"
android:text="提交"
/>
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="5dp"
android:textSize="18sp"
android:id="@+id/tv_localinfo"
/>
</LinearLayout>
</RelativeLayout>
地图效果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐