Проблема с файлом метаданных службы специальных возможностей [Xamarin Android]

Я работаю над службой специальных возможностей для Android в Xamarin.

В настоящее время я пытаюсь воспроизвести эту лабораторную работу (Java/Android SDK), но в Xamarin: https://codelabs.developers.google.com/codelabs/developing-android-a11y-service/#2

По сути, вот моя служба специальных возможностей:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android;
using Android.AccessibilityServices;
using Android.App;
using Android.Content;
using Android.Graphics;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Views.Accessibility;
using Android.Widget;

namespace AccessibilityServiceTest.Droid.Services
{
    [Service(Label = "Input Utility", Permission = Manifest.Permission.BindAccessibilityService)]
    [IntentFilter(new string[] { "android.accessibilityservice.AccessibilityService" })]
    [MetaData("android.accessibilityservice", Resource = "@xml/ServiceConfig")]
    public class TapService : AccessibilityService
    {

        public override void OnAccessibilityEvent(AccessibilityEvent e)
        {
        }

        public override void OnInterrupt()
        {
        }

        public override bool OnUnbind(Intent intent)
        {
            return base.OnUnbind(intent);
        }

        protected override void OnServiceConnected()
        {
            base.OnServiceConnected();
        }

    }
}

Вот мой файл метаданных:

<?xml version="1.0" encoding="utf-8" ?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
   android:accessibilityFeedbackType="feedbackGeneric"
   android:accessibilityFlags="flagDefault"
   android:canPerformGestures="true"
   android:canRetrieveWindowContent="true" />

Однако я не могу найти папку xml в папке Resources моего проекта Xamarin.Android. Именно здесь официальная документация говорит мне поместить файл метаданных в (ServiceConfig.xml). Я попытался создать собственную папку xml внутри папки Resources, но это привело к ошибкам сбой обработки манифеста и ресурс xml/ServicConfig не найден.

Мне было бы очень полезно, если бы кто-нибудь сказал мне, где и как я должен разместить свой файл метаданных (ServiceConfig.xml) для моего AccessibilityService.


person 0xB01b    schedule 27.12.2020    source источник
comment
Можете ли вы проверить свой файл AndroidManifest.xml, который создается во время компиляции? Он должен быть в obj/Debug/Android или где-то в этом роде. Может быть, ему не хватает чего-то.   -  person Cheesebaron    schedule 28.12.2020
comment
Я думаю, что это соответствующий бит из автоматически сгенерированного файла (также я знаю вас из форума Xamarin, хе-хе): ‹service android:label=Input Utility android:permission=android.permission.BIND_ACCESSIBILITY_SERVICE android:name=crc64608a83016c077e5b.TapService› ‹meta -data android:name=android.accessibilityservice android:resource=@xml/ServiceConfig /› ‹intent-filter› ‹action android:name=android.accessibilityservice.AccessibilityService /› ‹/intent-filter› ‹/service›   -  person 0xB01b    schedule 28.12.2020
comment
Хорошо, это действительно странно, но я сделал еще один файл xml и поместил его в папку xml (тот же контент, что и раньше). Я назвал его config.xml вместо ServiceConfig, и тогда он работал, когда я использовал новый. Все равно со старым работать не будет.   -  person 0xB01b    schedule 28.12.2020


Ответы (1)


Так вот что исправил ошибку. Я добавил еще один файл метаданных (с тем же содержимым, что и раньше), но назвал его по-другому (config.xml в моем случае), и вместо этого использовал его, и это сработало. Однако по какой-то причине он по-прежнему не будет работать со старым файлом (ServiceConfig.xml).

После добавления нового файла обязательно отредактируйте атрибут, чтобы использовать имя нового файла:

[MetaData("android.accessibilityservice", Resource = "@xml/config")]

person 0xB01b    schedule 28.12.2020
comment
Спасибо, что поделился. Не забудьте принять ответ. - person Wendy Zang - MSFT; 29.12.2020
comment
@WendyZang-MSFT Буду, но ждать 11 часов. - person 0xB01b; 29.12.2020