簡體   English   中英

HMS 核心 map 套件在我的 android 應用程序上根本不起作用

[英]HMS core map kit not working at all on my android app

我正在嘗試在我的應用程序中使用華為 HMS map 套件,我是整體地圖的新手(無論是來自谷歌還是華為),我遵循了文檔中的教程和華為提供的代碼實驗室中的教程並將我的一起編寫代碼,但是當我運行 map 活動時,什么也沒有出現,我得到的只是一個空白活動,我在整個代碼中編寫了一些日志語句,並且只有其中一個被記錄在 on create 方法的最頂部。 該應用程序也不會崩潰。

這是我的代碼,它可能有什么問題?


public class MapActivity extends AppCompatActivity implements OnMapReadyCallback {
 
    private HuaweiMap hMap;
 
    private MapView mMapView;
 
    private static final String MAPVIEW_BUNDLE_KEY = "MapViewBundleKey";
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map);
 
        Log.i("TAG", "onCreate");
 
        //get mapview instance
        mMapView = findViewById(R.id.mapView);
 
        Bundle mapViewBundle = null;
        if (savedInstanceState != null) {
            mapViewBundle = savedInstanceState.getBundle(MAPVIEW_BUNDLE_KEY);
        }
 
        MapsInitializer.setApiKey(android.net.Uri.encode("my api key here"));
        mMapView.onCreate(mapViewBundle);
        //get map instance
        mMapView.getMapAsync(this);
    }
 
    @Override
    public void onMapReady(HuaweiMap map) {
        //get map instance in a callback method
        Log.d("TAG", "onMapReady: ");
        hMap = map;
    }
 
    @Override
    protected void onStart() {
        super.onStart();
        mMapView.onStart();
    }
 
    @Override
    protected void onStop() {
        super.onStop();
        mMapView.onStop();
    }
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        mMapView.onDestroy();
    }
 
    @Override
    protected void onPause() {
        mMapView.onPause();
        super.onPause();
    }
 
    @Override
    protected void onResume() {
        super.onResume();
        mMapView.onResume();
    }
 
    private static boolean hasPermissions(Context context, String... permissions) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && permissions != null) {
            for (String permission : permissions) {
                if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                    return false;
                }
            }
        }
        return true;
    }
}

在代碼之外,我確定了我的華為應用程序庫連接配置、api 密鑰和所有,以及 gradle 中所需的依賴項

我檢查了我的 minSDK 並確保它也是 19。 仍然..沒有任何工作

請幫我

謝謝

1. 為什么會這樣?

HUAWEI Map Kit支持的設備是華為手機。 如果您使用谷歌手機,go 到第 2 步。

2. 怎么做?

如果你

通過檢測設備類型並采取相應措施,尋找一種允許我在同一應用程序中使用兩個地圖的方法,

您可以使用G+H 解決方案 使用 G+H 方法,您可以維護一個代碼庫,並根據任一代碼庫的可用性決定是使用 GMS 還是 HMS。

首先,檢查GMS和HMS是否可用。

public boolean  isGMS(){
        return GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this) == com.google.android.gms.common.ConnectionResult.SUCCESS;
    }
public boolean  isHMS(){
        return HuaweiApiAvailability.getInstance().isHuaweiMobileServicesAvailable(this) == com.huawei.hms.api.ConnectionResult.SUCCESS;
}

或者請參考:如何在設備中檢查谷歌移動服務是否啟用?

其次,進入不同的代碼分支,執行不同的map初始化任務。

if(isGMS()) {
init Google map and functions
} else if(isHMS()) {
init Huawei map and functions
}

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM