| |
|
开发:
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? 码云下载地址: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这个文件是配置文件 { 这里我是提供了两种,一种是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 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |