1、下載Uni插件項目
在Uni官網下載Uni插件項目,并參考官網插件項目創建插件項目.
開發者須知 | uni小程序SDK
如果下載下來項目運行不了可以參考下面鏈接進行處理
UniApp原生插件制作_wangdaoyin2010的博客-CSDN博客
2、引入高德SDK
2.1 在高德官網下載對應SDK
相關下載-Android 地圖SDK | 高德地圖API
2、引入高德SDK
Android Studio 配置工程-創建工程-開發指南-Android 地圖SDK | 高德地圖API
也可以參考:高德地圖:No implementation found for void com.autonavi.base.ae.gmap.GLMapEngine.nativeInitParam_易尋資料的博客-CSDN博客
?注意:一定要按照官網方式進行引入,且多種方式不能混合起引用,本人比較建議使用方法一
3、設置ApiKey和更新隱私合規
調用如下方法進行隱私合規更新和設置APiKey
可以參考:開發者注意事項-創建工程-開發指南-iOS 地圖SDK | 高德地圖API
MapsInitializer.updatePrivacyShow(this.mUniSDKInstance.getContext(), true, true); MapsInitializer.updatePrivacyAgree(this.mUniSDKInstance.getContext(), true); MapsInitializer.setApiKey(apiKey);
4、創建一個組件打開高德離線地圖
package com.mnyc.amap.amap3dsearch;import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.widget.Button;import androidx.annotation.NonNull;import com.alibaba.fastjson.JSONObject;
import com.amap.api.maps.MapsInitializer;
import com.amap.api.maps.offlinemap.OfflineMapActivity;import java.util.HashMap;
import java.util.Map;import io.dcloud.feature.uniapp.UniSDKInstance;
import io.dcloud.feature.uniapp.ui.action.AbsComponentData;
import io.dcloud.feature.uniapp.ui.component.AbsVContainer;
import io.dcloud.feature.uniapp.ui.component.UniComponent;
import io.dcloud.feature.uniapp.ui.component.UniComponentProp;/*** 自定義打開離線地圖組件按鈕*/
public class MnycAMapOfficelineButton extends UniComponent<Button> implements View.OnClickListener {Context context;Button button;private static final String TAG = "MnycAMapOfficelineButton";public MnycAMapOfficelineButton(UniSDKInstance instance, AbsVContainer parent, AbsComponentData componentData) {super(instance, parent, componentData);}@Overrideprotected Button initComponentHostView(@NonNull Context context) {this.context = context;button = new Button(context);button.setText("離線地圖");button.setOnClickListener(this);return button;}@Overridepublic void onClick(View view) {try {context.startActivity(new Intent(this.context, OfflineMapActivity.class));} catch (Exception e) {exception(e);Log.e(TAG, e.getMessage());}}@UniComponentProp(name = "label")public void setLongitude(String label) {button.setText(label);}// 將打開離線地圖異常進行拋出成Uni中的事件public void exception(Exception exception) {JSONObject dataJson=new JSONObject();JSONObject detailJson=new JSONObject();detailJson.put("exception", exception);//目前uni限制 參數需要放入到"detail"中 否則會被清理dataJson.put("detail", detailJson);fireEvent("exception", dataJson);}
}
5、錯誤場景
錯誤1:離線地圖組件沒有城市列表
問題:沒有調用高德更新隱私合規兩個方法,進行調用即可
錯誤2:地圖組件為白色
問題:沒有調用高德更新隱私合規兩個方法,進行調用即可
錯誤3:地圖為黑屏、但是有高德Logo和放大縮小按鈕
?問題:so文件引入錯誤,按照官網方法1引入sdk(so文件),注意不能多種方式混合引入
錯誤4:離線地圖組件“下載出現異常”在AS中調試或者使用真機調試可以正常下載地圖,打包成插件使用UniApp進行調試時出現“下載出現異常”
問題:有可能是高德ApiKey沒有正確配置
解決思路:不適用高德離線地圖組件,通過如下代碼手動下載,在OfflineMapManager第二個參數對應類的onDownload方法中可以查看具體的錯誤代碼是多少
/構造OfflineMapManager對象
OfflineMapManager amapManager = new OfflineMapManager(this, this);
//按照citycode下載
amapManager.downloadByCityCode(String citycode);
//按照cityname下載
amapManager.downloadByCityName(String cityname);
離線地圖狀態值
?每個值對應具體說明
?OfflineMapStatus 說明
注意:使用同一個Key在AS中調試下載等正常,因為在AS中使用的是調試模式,然后SDK中帶了調試證書,所以可以正常下載。打包成SDk后放到Uni中生成自定義基座進行調試,這樣在高德地圖SDK這塊就是使用的是你自己配置的ApiKey證書,所以如果這個證書配置錯誤就出現下載失敗。
注意:目前發現不管ApiKey是否設置正確都地圖都能夠正常顯示,只是離線地圖下載失敗,所以這點需要注意。
?