我试图将HERE映射嵌入Xamarin应用程序中。为我提供了.aar库,该库已作为一个单独的项目绑定并在我的Android项目中引用。
根据documentation,我应该在我的应用程序中嵌入意图服务,以使地图正常工作。
所以我添加了
<service
android:name="com.here.android.mpa.service.MapService"
android:label="MAPSLABEL"
android:exported="false">
<intent-filter>
<action android:name="com.my.app.MapsAction">
</action>
</intent-filter>
</service>
到Properties/AndroidManifest.xml
。在地图活动中,我添加了地图设置初始化:
var path = GetExternalFilesDir(null) + File.Separator + ".map_cache";
var success = MapSettings.SetIsolatedDiskCacheRootPath(path, "com.my.app.MapsAction"); // returns true
然后我在地图片段上这样调用init:
var f = (SupportMapFragment)SupportFragmentManager.FindFragmentById(Resource.Id.map_fragment);
f.Init(this);
在回调中,我收到MISSING_SERVICE
错误:
com.nokia.maps.MapServiceClient$c: Map Service Not Found
at com.nokia.maps.MapServiceClient.a(MapServiceClient.java:72)
at com.nokia.maps.MapsEngine.a(MapsEngine.java:688)
at com.nokia.maps.MapsEngine.a(MapsEngine.java:393)
at com.here.android.mpa.common.MapEngine.init(MapEngine.java:198)
at com.nokia.maps.bw.a(MapFragmentImpl.java:150)
at com.here.android.mpa.mapping.SupportMapFragment.init(SupportMapFragment.java:112)
at md598e0954ab08e7442f21c9c8f5f40423e.MapActivity.n_onResume(Native Method)
at md598e0954ab08e7442f21c9c8f5f40423e.MapActivity.onResume(MapActivity.java:40)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1363)
at android.app.Activity.performResume(Activity.java:7440)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3780)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3845)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3065)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1724)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:7000)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
似乎我什至无法在代码中找到该服务:
var intent = new Intent("com.my.app.MapsAction");
var result = PackageManager.ResolveService(intent, PackageInfoFlags.Services); // returns null
我发现服务声明中可能存在一些错误,或者试图在清单中声明第三方服务时缺少了一两个步骤。有什么建议吗?
谢谢。
答案 0 :(得分:0)
通常,问题出在椅子和键盘之间。
当我在清单中添加service
元素时,我实际上是在service
元素中添加了manifest
元素。这是不正确的,您的service
应该在application
下声明。因此,Properties/AndroidManifest.xml
的正确版本看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="0.0.0.0" android:installLocation="auto" package="our_app_package">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
<application android:label="our_app_label">
<service android:name="com.here.android.mpa.service.MapService" android:label="service_label" android:exported="false">
<intent-filter>
<action android:name="service_action"></action>
</intent-filter>
</service>
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
</manifest>
它已与其他application
东西正确合并,并且该服务可以解析。
谢谢@Miiite,让我对清单进行了三遍检查。