Xamarin.Android не может разрешить службу из сторонней библиотеки - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь встроить карты ЗДЕСЬ в приложение Xamarin.Мне предоставили библиотеку .aar, которую я связал как отдельный проект и на которую я ссылаюсь в своем проекте Android.

Согласно документации я должен встроить службу намерений в свойприложение, чтобы заставить карты работать.

Итак, я добавил

<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

Затем я вызываю инициализацию для фрагмента карты следующим образом:

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

Я подумал, что в декларации службы, возможно, есть какая-то ошибка, или япропустить шаг или два при попытке объявить сторонний сервис в моем манифесте.Любой совет?

Спасибо.

1 Ответ

0 голосов
/ 28 января 2019

Как обычно, проблема была между стулом и клавиатурой.

Когда я добавлял элемент 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за то, что заставил меня трижды проверить мой манифест.

...