【发布时间】:2020-04-21 09:03:17
【问题描述】:
所以我目前构建了一个 Android 应用程序(对于 API 24 及更高版本,使用 Visual Studio 和 Xamarin,但不是 Xamarin.Forms 应用程序),如果某个应用程序正在运行,它会显示一个覆盖图标。 如果我在 VisualStudio 中运行模拟器,一切正常,覆盖按钮是可点击的,并且一切正常,即使构建为 RELEASE 并通过模拟器运行它(我测试了 API 24(Android 7)及更高版本,直到 29(Android 10) )
因此,如果我将其打包到 apk 并将其安装在物理设备上(Android 7 到 Android 10,因为我有多个测试仪),也会显示覆盖图标,但如果用户按下它,则不会发生任何事情。就像点击不再注册一样。
//编辑:我遇到的一个主要问题: 我拥有的只有 Android 设备是 Android 6 (API 23) 和 Android 9(但 USB 调试功能损坏:在我将设备与我的电脑连接后,它显示:USB 调试处于活动状态,然后消息再次消失。所以有无法自己在 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);
听说如果 API 为 26 或更高,则要显示的叠加层的 WindowManagerTypes 是不一样的。
在 OnCLick 事件中我有这个:
Log.Debug("Service", "CLICK->" + v.Id);
if (v.Id == Overlay.Id)
OpenShortInfo();
在 OnTouch 事件中,我有这个只是为了记录一些事情:
Log.Debug("Service", "TOUCH->"+v.Id);
如果我使用模拟器,则会调用两个调试日志,但如果我使用物理设备则不会。
感谢您的帮助,抱歉英语不好
【问题讨论】:
标签: c# android visual-studio xamarin.android