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<AMapNaviView> {

    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<NaviLatLng> startList = new ArrayList<NaviLatLng>();
        startList.add(new NaviLatLng(Float.parseFloat(startLatitude),Float.parseFloat(startLongitude)));
        // 终点信息
        List<NaviLatLng> endList = new ArrayList<NaviLatLng>();
        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();
    }
}

Logo

前往低代码交流专区

更多推荐