【发布时间】:2021-09-09 20:32:45
【问题描述】:
此请求针对产品的特定用例
假设我将一个 AccessibilityService 实例化为我的应用程序上下文的一部分:我需要持续捕获屏幕内容,为此我正在使用附加到我的应用程序的 MediaProjectionManager。这是可行的,但需要注意的是:每次我重新启动设备或应用程序时,都必须对 MediaProjection 实例发出新请求,从而强制用户接受屏幕捕获系统权限对话框。
我正在尝试为用户跳过此步骤。我已经实现了自动触发对话请求。但是为了接受对话框提示,这是我尝试过的:
- 记录视图层次结构并找到对应的nodeViewId 对话框接受按钮。问题:AccessibilityService 没有提供 该系统对话框的 event.source。
- 使用 AccessibilityService.dispatchGesture 执行点击操作 在对话框的“立即开始”按钮的坐标上,在 系统显示它。
// PermissionAutomator
permissionsAutomator.listener = object : PermissionsAutomator.Listener {
override fun onPerformClickOnCoordinate() {
val clickPath = Path()
clickPath.moveTo(604F, 737F)
val clickStroke = StrokeDescription(clickPath, 0, 1)
val clickBuilder = GestureDescription.Builder()
clickBuilder.addStroke(clickStroke)
val gesture = clickBuilder.build()
val callback = object : GestureResultCallback() {
override fun onCompleted(gestureDescription: GestureDescription) {
super.onCompleted(gestureDescription)
Timber.d("gesture onCompleted")
}
override fun onCancelled(gestureDescription: GestureDescription) {
super.onCancelled(gestureDescription)
Timber.d("gesture onCancelled")
}
}
dispatchGesture(gesture, callback, null)
}
}
有人对这个问题有什么建议吗?也许该解决方案可以针对 Android 上的每个系统权限对话框进行扩展。谢谢!
【问题讨论】:
-
您的意思是要跳过截屏权限对话框吗?
标签: android accessibilityservice android-mediaprojection