accessibilityservice 相关问题

一种Android服务,它在后台运行,并在触发可访问性事件时由系统接收回调。

Android OS 13 - 使用辅助功能服务授予 MediaProjection 权限

我正在开发一个应用程序,它是一个私人应用程序,即它不会在 Google Play 商店上发布。 我使用的是 Android OS 13 设备。我的应用程序有屏幕投射功能。要使用此功能...

回答 1 投票 0

如何使用 AccessibilityService 从活动窗口获取所有内容

更新窗口时如何获取屏幕上的所有内容?这可能吗? 意味着当我打开和关闭任何应用程序以及设备的主屏幕时,我想从活动窗口获取所有文本。 <...

回答 1 投票 0

Android 辅助功能应用程序未执行滑动手势

我一直致力于创建一个 Android 应用程序,该应用程序可以每 5 秒在屏幕上执行一次向上滑动手势。这个想法是让它滚动任何打开的应用程序,例如 Instagram 或 Facebook 上的 reels

回答 1 投票 0

为什么 getRootInActiveWindow() 在 Accessibility Event 中总是返回 null

我已经尝试了AccessibilityServiceConfig.xml的所有排列和组合。以下是 AccecssibilityService 和 AccessibilityServiceConfig.xml 的代码。 这是我的代码: @覆盖

回答 1 投票 0

与 AccessibilityService 一起使用,dispatchGesture 始终返回 false

最常见的答案是您需要添加 android:canPerformGestures="true",但我已经添加了它。请帮助我理解这一点。我正在用 flutter 编写一个程序,并且我正在尝试

回答 1 投票 0

将辅助功能事件传递到后台线程获取 null

尝试使用Android AccessibilityService,将AccessibilityEvent传递给AsyncTask,但AccessibilityEvent中的所有值都消失了,例如mEventTime变为0,mPackageName变为null等。无法...

回答 3 投票 0

event.source()在android中返回null

当使用辅助服务检测到活动更改时,我正在实现将剪贴板文本粘贴到另一个应用程序的 EditText 视图。 关于我的无障碍服务、无障碍活动

回答 3 投票 0

dispatchGesture 始终返回 false

我的服务无法启动屏幕上的点击。 AccessibilityService 的dispatchGesture 始终返回 false。如何解决这个问题呢? 软件开发工具包API 31 我的服务: 公共类 FloatingButton 扩展

回答 1 投票 0

如何从AccessibilityNodeInfo中的所有子节点获取文本

我正在尝试从 AccessiblityNodeInfo 的所有子节点读取文本。 我尝试获取 AccessiblityNodeInfo.getParent() 和 AccessibilityNodeInfo.getChildCount() for(int i=0; i<

回答 2 投票 0

Android 13 - 为不是从 Google Play 安装的 APK 启用辅助功能服务

在 Android 13 测试版上,用户无法从“设置”应用启用辅助功能。当用户尝试执行此操作时,会出现错误: 限制设置 为了您的安全,此设置目前为

回答 5 投票 0

Google Play 由于辅助 API 政策而被拒绝:Flutter 应用程序中缺少显着的披露

我最近在 Google Play 商店更新了我的 Flutter 应用程序,添加了 Pin 实时比分功能。此功能将 AccessibilityService API 与 flutter_overlay_window 结合使用(

回答 1 投票 0

Android 软键盘无法与辅助功能服务和 WindowManager 一起正常工作

所以,在谷歌和SO搜索这个特定问题后,我终于来了,这个问题在过去的三天里让我发疯了。有很多答案,但似乎都没有......

回答 2 投票 0

是否可以使用辅助功能服务检测 Android 中何时打开 PIP?

我找不到这方面的任何信息或文档。请帮忙。谢谢你。

回答 2 投票 0

辅助服务点击不在预期坐标中

所以我尝试基于这个存储库在android studio中创建一个带有辅助功能服务的自动点击器。 我有以下这样的辅助功能服务配置。 所以我尝试基于这个存储库在android studio中创建一个带有辅助功能服务的自动点击器。 我有以下这样的辅助服务配置。 <?xml version="1.0" encoding="utf-8"?> <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:accessibilityEventTypes="typeAllMask" android:accessibilityFeedbackType="feedbackGeneric" android:accessibilityFlags="flagDefault" android:canPerformGestures="true" android:canRetrieveWindowContent="true" android:notificationTimeout="100" android:description="@string/accessibility_service_description" /> 这些是 kotlin 文件 FloatingClickService.kt class FloatingClickService : Service() { private lateinit var manager: WindowManager private lateinit var view: View private lateinit var clickView: View private lateinit var params: WindowManager.LayoutParams private lateinit var clickParams: WindowManager.LayoutParams private var startDragDistance: Int = 0 private var timer: Timer? = null private lateinit var btnStart: ImageButton private lateinit var btnSetting: ImageButton private lateinit var btnMove: ImageButton override fun onBind(intent: Intent): IBinder? { return null } override fun onCreate() { super.onCreate() startDragDistance = dp2px(10f) manager = getSystemService(Context.WINDOW_SERVICE) as WindowManager view = createView(R.layout.widget) clickView = createView(R.layout.edittext_widget) //setting the layout parameters params = createLayoutParams() clickParams = createLayoutParams(true) //getting windows services and adding the floating view to it manager.addView(view, params) manager.addView(clickView, clickParams) btnStart = view.findViewById(R.id.btn_start) btnSetting = view.findViewById(R.id.btn_setting) btnMove = view.findViewById(R.id.btn_move) updateView() btnStart.setOnClickListener { viewOnStart() } btnSetting.setOnClickListener { // setting action } setOnTouchListener() } private var isOn = false private fun createLayoutParams(custom: Boolean = false): WindowManager.LayoutParams { val overlayParam = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY } else { WindowManager.LayoutParams.TYPE_PHONE } return WindowManager.LayoutParams( if (custom) dp2px(48f) else WindowManager.LayoutParams.WRAP_CONTENT, if (custom) dp2px(48f) else WindowManager.LayoutParams.WRAP_CONTENT, overlayParam, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT) } private fun createView(layoutId: Int): View { val view = LayoutInflater.from(this).inflate(layoutId, null) //setting the layout parameters params = createLayoutParams(false) clickParams = createLayoutParams(true) //getting windows services and adding the floating view to it manager = getSystemService(Context.WINDOW_SERVICE) as WindowManager return view } private fun updateView() { if (isOn) { btnSetting.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.settings)) btnSetting.isEnabled = false btnStart.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.pause)) } else { btnSetting.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.setting_active)) btnSetting.isEnabled = true btnStart.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.play)) } } private fun viewOnStart() { if (isOn) { timer?.cancel() setOnTouchListener() } else { timer = fixedRateTimer( initialDelay = 0, period = 3000L ) { val location = IntArray(2) clickView.getLocationOnScreen(location) autoClickService?.click(location[0] + clickView.right, location[1] + clickView.bottom) } removeTouchListener() } isOn = !isOn updateView() } private fun removeView() { manager.removeView(view) manager.removeView(clickView) } @SuppressLint("ClickableViewAccessibility") private fun setOnTouchListener() { clickView.setOnTouchListener( TouchAndDragListener(clickParams, startDragDistance) { manager.updateViewLayout(clickView, clickParams) } ) btnMove.setOnTouchListener( TouchAndDragListener(params, startDragDistance) { manager.updateViewLayout(view, params) } ) } @SuppressLint("ClickableViewAccessibility") private fun removeTouchListener() { clickView.setOnTouchListener(null) btnMove.setOnTouchListener(null) } override fun onDestroy() { timer?.cancel() removeView() super.onDestroy() } } AutoClickService.kt var autoClickService: AutoClickService? = null class AutoClickService : AccessibilityService() { override fun onInterrupt() { // NO-OP } override fun onAccessibilityEvent(event: AccessibilityEvent) { } override fun onServiceConnected() { autoClickService = this startActivity( Intent(this, MainActivity::class.java) .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)) } fun click(x: Int, y: Int) { val path = Path() path.moveTo(x.toFloat(), y.toFloat()) val builder = GestureDescription.Builder() val gestureDescription = builder .addStroke(GestureDescription.StrokeDescription(path, 10, 10)) .build() dispatchGesture(gestureDescription, null, null) } } 像这样启动服务 val serviceIntent = Intent( this@MainActivity, FloatingClickService::class.java ) startService(serviceIntent) 实际结果是,点击的位置不是在视图的中心,而是在视图的右下角。如何让点击发生在clickView的中心? 我尝试获取视图的中心 x 和 y,但没有点击。我的期望是点击的图块应该与点视图相同。 (我希望点击发生在点视图的中心) 我和你有同样的问题,我也使用了Nestorm001的源代码。 所以问题是因为当我们使用 PNG(像您使用的圆形),并且在该自定义布局中添加 onTouchListener 时,该侦听器将吸收辅助功能单击操作(如果您单击视图的中心)。我们仍然可以单击 PNG 的 4 个角,因为它是透明的,这会将单击操作传递到下面的视图。 我疯了两天,终于发现问题所在了。因此,如果您想修复它,在调用 Accessibility to click 之前,您必须更新该自定义布局的布局参数,如下所示: layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE; // important - disable touch event wm.updateViewLayout(your_custom_view, layoutParams); 然后,当您想要停止自动单击时,请将标志更改为 FLAG_NOT_FOCUSABLE,以便您可以再次拖动并移动该自定义布局。 快乐编码。顺便说一句,对不起我的英语。

回答 1 投票 0

Android 辅助功能服务中的“performGlobalAction(GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN)”的替代方案?如何以编程方式启用它?

我一直在 Android 辅助功能服务中使用 GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN 全局辅助功能操作,以编程方式启用分屏模式。然而,这个行为似乎...

回答 1 投票 0

Android getRootInActiveWindow() 最多只需要 5 个列表项

我正在尝试从 Android 中 AccessibilityService 的 getRootInActiveWindow() 读取列表视图。 AccessibilityNodeInfo topMostNode = getTopMostParentNode(getRootInActiveWindow()); 这就是我的...

回答 1 投票 0

Android 中的辅助服务不断被禁用

我开发了一个基于无障碍服务的Android应用程序。但我有一个问题,我在互联网上找不到任何帮助。当我在任何设备上安装该应用程序时,evi...

回答 3 投票 0

onAccessibilityEvent 根本没有被调用

我正在尝试实现 AccessibilityService。我在下面分享了我的代码。 当我从设置菜单打开辅助服务时,会调用 onServiceConnected() 但 onAccessibiltyEvent...

回答 5 投票 0

在字段上插入或删除字符而不删除之前的内容

AcessibilityService中有一些功能可以在字段上插入字符,但不删除以前的内容以及模拟退格按钮? 现在我已经用全局字符串变量来实现了...

回答 1 投票 0

如何禁用无障碍服务的覆盖气泡点击?

我正在为我的项目实现自动点击功能。我希望辅助服务在开始运行时将无法与覆盖气泡交互。然而,结果却是……

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.