| |
|
|
开发:
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图书馆 购物 三丰科技 阅读网 日历 万年历 2025年11日历 | -2025/11/28 22:42:59- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |