Итак, в настоящее время я создаю приложение Android (для API 24 и выше, с использованием Visual Studio и Xamarin, но не приложения Xamarin.Forms), которое отображает значок наложения, если запущено определенное приложение. Если я запускаю эмулятор в VisualStudio, то все работает нормально, кнопка «Оверлей» нажимается, и все работает, как и должно, даже если сборка выполняется как RELEASE и выполняется через эмулятор (я тестировал API 24 (Android 7) и выше до 29 (*) 1033 * 10))
Так что, если я упакую его в apk и установлю его на физическое устройство (также с Android 7 до Android 10, потому что у меня есть несколько тестеров), также появится значок наложения, но если пользователь нажимает на него, ничего не происходит. Это похоже на то, что щелчок больше не регистрируется.
// edit: одна серьезная проблема, с которой я столкнулся: только Android устройств, которые у меня есть, Android 6 (API 23) и Android 9 ( но с неработающей функцией отладки usb: после подключения устройства с моим p c он говорит: USB Debugging active, затем сообщение исчезает и снова. Поэтому нет способа отладить приложение на устройстве Android я (основной смартфон - iPhone)
Вот код:
Мой «главный» класс определен так:
public class MyAccessibilityService : AccessibilityService, View.IOnTouchListener, View.IOnClickListener
ImageButton и View определяется глобально для доступа к нему в моем классе
private static ImageButton Overlay;
private static View OverlayLayout;
, как только должна появиться кнопка наложения, для этого:
windowManager = GetSystemService(WindowService).JavaCast<IWindowManager>();
OverlayLayout = LayoutInflater.From(this).Inflate(Resource.Layout.Sidebar, null, false);
Overlay = new ImageButton(this);
Overlay.Id = View.GenerateViewId();
Overlay.SetOnTouchListener(this);
Overlay.SetOnClickListener(this);
Overlay.SetImageResource(Resource.Mipmap.app64);
WindowManagerTypes layoutFlag = Build.VERSION.SdkInt >= BuildVersionCodes.O
? WindowManagerTypes.ApplicationOverlay
: WindowManagerTypes.Phone;
paramsF = new WindowManagerLayoutParams(
ViewGroup.LayoutParams.WrapContent,
ViewGroup.LayoutParams.WrapContent,
layoutFlag,
WindowManagerFlags.NotTouchModal | WindowManagerFlags.NotFocusable,
Format.Transparent);
paramsF.Gravity = GravityFlags.Bottom | GravityFlags.Right;
paramsF.X = 100;
paramsF.Y = 0;
windowManager.AddView(Overlay, paramsF);
Я слышал, что WindowManagerTypes для наложения будет отображаются не то же самое, если API 26 или выше.
в событии OnCLick У меня есть это:
Log.Debug("Service", "CLICK->" + v.Id);
if (v.Id == Overlay.Id)
OpenShortInfo();
в событии OnTouch У меня есть это только для регистрации некоторых вещей:
Log.Debug("Service", "TOUCH->"+v.Id);
Оба журнала отладки вызываются, если я использую эмулятор, но не если я использую физический деви ce.
Спасибо за помощь и извините за плохой английский sh