1:下载AndroidStudio-Android 开发者 | Android Developers
2:配置java环境-Windows配置java环境 - 冬首 - 博客园
3:去插件市场下载Uniapp提供的Demo-原生开发者支持
Android Demo下载网盘地址:https://pan.baidu.com/s/1ZOzK_J7_xwxmiF8G0Vff-Q
提取码:1006
码云下载地址:UniPlugin-Hello-AS: 1
下载后导入AndroidStudio
这个是他提供Demo里的Moudle
当然,别忘了配置高德,不做过多解释
Android Studio-自动部署-创建工程-开发指南-Android 导航SDK | 高德地图API
修改高德key
最后编写完成要生成aar文件,我的Studio不知道是版本问题还是什么,和别人的不一样,无法像打包一样打成aar文件,但是可以在这里去切换release还是debug
先cleanProject,然后编译完成后再RebuildProject ,最终编译完成后
这个就是咱们所需的aar文件
然后在Hbuilder中导入这个aar文件
红框圈住的是咱们去创建出来的,箭头所指的可以修改自己想要的名字 。
package.json这个文件是配置文件
{
"name": "JFloatWindow",
"id": "JFloatWindow",
"version": "1.0.0",
"description": "插件描述信息",
"_dp_type":"nativeplugins",
"_dp_nativeplugin":{
"android": {
"plugins": [
{
"type": "component",
"name": "aMap",
"class": "io.dcloud.uniplugin.AMapNavigationView"
},
{
"type": "module",
"name": "address",
"class": "io.dcloud.uniplugin.AddressUniMdule"
}
],
"integrateType": "aar",
"dependencies": [
"com.amap.api:navi-3dmap:latest.integration",
"com.amap.api:location:latest.integration"
],
"compileOptions": {
"sourceCompatibility": "1.8",
"targetCompatibility": "1.8"
},
"minSdkVersion" : 21
}
}
}
这里我是提供了两种,一种是AndroidView,还有一种是只调用方法
View的用法
调用View里的方法 :
this.$refs.telText.startNavi(this.area);
调用方法的用法:
里面的address就是配置信息里的name
直接调用就可以了
切记,要生成自定义基座,每次更换aar文件都需重新生成自定义基座
最后放上两个Adnroid java类的代码:
public class AddressUniMdule extends UniModule {
@UniJSMethod(uiThread = false)
public String returnArea(String msg){
JSonObject jsonObject1 = new JSonObject();
JSonObject jsonObject = new JSonObject();
try {
jsonObject.put("verticalAccuracyMeters","");
jsonObject.put("gpsAccuracyStatus","");
jsonObject.put("time",String.valueOf(System.currentTimeMillis()));
jsonObject.put("fromMockProvider","");
jsonObject.put("elapsedRealtimeUncertaintyNanos","");
jsonObject.put("district","");
jsonObject.put("bearing","");
jsonObject.put("address","");
jsonObject.put("speedAccuracyMetersPerSecond","");
jsonObject.put("conScenario","");
jsonObject.put("poiName","");
jsonObject.put("satellites","");
jsonObject.put("longitude",AMapNavigationView.lon);
jsonObject.put("street","");
jsonObject.put("provider","");
jsonObject.put("altitude","");
jsonObject.put("road","");
jsonObject.put("coordType","");
jsonObject.put("locationDetail","");
jsonObject.put("buildingId","");
jsonObject.put("speed","");
jsonObject.put("bearingAccuracyDegrees","");
jsonObject.put("city","");
jsonObject.put("province","");
jsonObject.put("trustedLevel","");
jsonObject.put("fixLastLocation","");
jsonObject.put("offset","");
jsonObject.put("errorInfo","");
jsonObject.put("adCode","");
jsonObject.put("streetNum","");
jsonObject.put("description","");
jsonObject.put("errorCode","");
jsonObject.put("cityCode","");
jsonObject.put("locationType","");
jsonObject.put("latitude",AMapNavigationView.lat);
jsonObject.put("mock","");
jsonObject.put("elapsedRealtimeNanos","");
jsonObject.put("accuracy","");
jsonObject.put("complete","");
jsonObject.put("country","");
jsonObject.put("floor","");
JSonObject object = new JSonObject();
object.put("gPSStatusString","");
object.put("gPSSatellites","");
jsonObject1.put("gpsResult",object);
jsonObject1.put("result",jsonObject);
} catch (JSonException e) {
e.printStackTrace();
}
//Log.e("接受111",jsonObject.toString());
return jsonObject1.toString();
}
@UniJSMethod(uiThread = false)
public void openService(){
Intent forgroundService = new Intent(mUniSDKInstance.getContext(),BackGroundService.class);
mUniSDKInstance.getContext().startService(forgroundService);
}
@UniJSMethod(uiThread = false)
public void stopService(){
Intent forgroundService = new Intent(mUniSDKInstance.getContext(),BackGroundService.class);
mUniSDKInstance.getContext().stopService(forgroundService);
}
@Override
public void onActivityDestroy() {
Intent forgroundService = new Intent(mUniSDKInstance.getContext(),BackGroundService.class);
mUniSDKInstance.getContext().stopService(forgroundService);
super.onActivityDestroy();
}
public class AMapNavigationView extends UniComponent {
private AMapNaviView naviView;
private AMapNavi aMapNavi;
public static Double lat;
public static Double lon;
public String naviType = "0"; //0 正式导航 1: 模拟导航
public AMapNavigationView(UniSDKInstance instance, AbsVContainer parent, AbsComponentData basicComponentData) {
super(instance, parent, basicComponentData);
}
@Override
protected AMapNaviView initComponentHostView(Context context) {
naviView = new AMapNaviView(context);
naviView.onCreate(new Bundle());
return naviView;
}
@Override
protected void onCreate() {
super.onCreate();
}
@UniComponentProp(name = "area")
public void setArea(String area) {
Log.e("打印一下传来的值",area);
JSonObject jsonObject = JSONObject.parseObject(area);
Log.e("打印一下转换后的值",jsonObject.toString());
String startLatitude = jsonObject.getString("startLatitude");
String startLongitude = jsonObject.getString("startLongitude");
String endLatitude = jsonObject.getString("endLatitude");
String endLongitude = jsonObject.getString("endLongitude");
if (null==jsonObject.getString("naviType")|| "".equals(jsonObject.getString("naviType"))){
naviType = "0";
}else {
naviType = jsonObject.getString("naviType");
}
// 获取导航Manager
aMapNavi = AMapNavi.getInstance(mUniSDKInstance.getContext());
aMapNavi.setUseInnerVoice(true);
// 起点信息
List startList = new ArrayList();
startList.add(new NaviLatLng(Float.parseFloat(startLatitude),Float.parseFloat(startLongitude)));
// 终点信息
List endList = new ArrayList();
endList.add(new NaviLatLng(Float.parseFloat(endLatitude),Float.parseFloat(endLongitude)));
// 经纬度算路
aMapNavi.calculateDriveRoute(startList, endList, null, PathPlanningStrategy.DRIVING_MULTIPLE_ROUTES_DEFAULT);
aMapNavi.addAMapNaviListener(new AMapNaviListener() {
@Override
public void onCalculateRouteSuccess(AMapCalcRouteResult aMapCalcRouteResult) {
//返回路线成功 这里通过AMapCalcRouteResult绘制路线
//获取RouteOverLay所需要的Amap 如果要把路线绘制到AMapNaviView 请获取AMapNaviView的Amap
AMap aMap = naviView.getMap();
//获取返回路线的数组routIDs aMapCalcRouteResult会返回一条或者多条路线。
//ps:多条路线是用来做多路线选择的功能但是这里我们只做简单导航。所以我们只绘制一条。
int[] routIds = aMapCalcRouteResult.getRouteid();
int routeId = routIds[0];
//通过routeId获取AMapNaviPath数据。
AMapNaviPath aMapNaviPath = aMapNavi.getNaviPaths().get(routeId);
//然后就可以创建RouteOverLay了
RouteOverLay routeOverLay = new RouteOverLay(aMap, aMapNaviPath, mUniSDKInstance.getContext());
//添加到AMapNaviView上。
routeOverLay.addToMap();
//绘制路线成功后。调用startNavi开始导航。
//当然你也可以在别的地方调用 AMapNavi.startNavi(); //但是一定要在onCalculateRouteSuccess之后调用。
if (naviType.equals("0")){
aMapNavi.startNavi(NaviType.GPS);
}else {
aMapNavi.startNavi(NaviType.EMULATOR);
}
}
public void onInitNaviFailure() {
}
public void onInitNaviSuccess() {
}
public void onStartNavi(int i) {
}
public void onTrafficStatusUpdate() {
}
public void onLocationChange(AMapNaviLocation aMapNaviLocation) {
lat = aMapNaviLocation.getCoord().getLatitude();
lon = aMapNaviLocation.getCoord().getLongitude();
}
public void onGetNavigationText(int i, String s) {
}
public void onGetNavigationText(String s) {
}
public void onEndEmulatorNavi() {
}
public void onArriveDestination() {
}
public void onCalculateRouteFailure(int i) {
}
public void onReCalculateRouteForYaw() {
}
public void onReCalculateRouteForTrafficJam() {
}
public void onArrivedWayPoint(int i) {
}
public void onGpsOpenStatus(boolean b) {
}
public void onNaviInfoUpdate(NaviInfo naviInfo) {
}
public void updateCameraInfo(AMapNaviCameraInfo[] aMapNaviCameraInfos) {
}
public void updateIntervalCameraInfo(AMapNaviCameraInfo aMapNaviCameraInfo, AMapNaviCameraInfo aMapNaviCameraInfo1, int i) {
}
public void onServiceAreaUpdate(AMapServiceAreaInfo[] aMapServiceAreaInfos) {
}
public void showCross(AMapNaviCross aMapNaviCross) {
}
public void hideCross() {
}
public void showModeCross(AMapModelCross aMapModelCross) {
}
public void hideModeCross() {
}
public void showLaneInfo(AMapLaneInfo[] aMapLaneInfos, byte[] bytes, byte[] bytes1) {
}
public void showLaneInfo(AMapLaneInfo aMapLaneInfo) {
}
public void hideLaneInfo() {
}
public void onCalculateRouteSuccess(int[] ints) {
}
public void notifyParallelRoad(int i) {
}
public void onUpdateTrafficFacility(AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos) {
}
public void onUpdateTrafficFacility(AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo) {
}
public void updateAimlessModeStatistics(AimLessModeStat aimLessModeStat) {
}
public void updateAimlessModeCongestionInfo(AimLessModeCongestionInfo aimLessModeCongestionInfo) {
}
public void onPlayRing(int i) {
}
@Override
public void onCalculateRouteFailure(AMapCalcRouteResult aMapCalcRouteResult) {
}
@Override
public void onNaviRouteNotify(AMapNaviRouteNotifyData aMapNaviRouteNotifyData) {
}
@Override
public void onGpsSignalWeak(boolean b) {
}
});
}
@UniJSMethod
public void startNavi(String area){
setArea(area);
}
@UniJSMethod
public void stopNavi(String s) {
Log.e("=====打印一下传来的值",s);
aMapNavi.stopNavi();
}
@Override
public void onActivityResume() {
super.onActivityResume();
aMapNavi.resumeNavi();
Log.e("xxx","onActivityResume");
}
@Override
public void onActivityStop() {
super.onActivityStop();
Log.e("xxx","onActivityStop");
}
@Override
public void onActivityPause() {
super.onActivityPause();
Log.e("xxx","onActivityPause");
}
@Override
public void onActivityDestroy() {
super.onActivityDestroy();
Log.e("xxx","onActivityDestroy");
aMapNavi.stopNavi();
}
}



