IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Uni-app原生插件开发 -> 正文阅读

[移动开发]Uni-app原生插件开发

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();
    }
}

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-10-27 12:56:47  更:2021-10-27 12:57:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:09:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码