HMS 核心地图套件在我的 android 应用程序上根本不起作用

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

我正在尝试在我的应用程序中使用华为 HMS 地图套件,我对地图总体上是新手(无论是来自 google 还是华为),我按照文档中的教程进行操作华为提供的代码实验室并将我的代码放在一起但是当我 运行 地图 activity 什么都没有出现时,我得到的只是一片空白 activity,我在我的整个过程中写了一些日志语句代码,并且只有其中一个被记录,它被放在 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.为什么会这样?

华为地图服务支持的设备为华为手机phone。如果您使用 Google phone,请转到步骤 2。

2。怎么办?

如果你

look for a way which allows me to use both maps in the same application by detecting the device type and acting accordingly,

您可以使用 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;
}

或请参考:How to check Google Mobile Services enable in device or not?

其次,进入不同的代码分支,执行不同的地图初始化任务。

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

希望对您有所帮助!