Closed liaoxuewei closed 1 year ago
不知道我对截屏的理解对不对呢
无障碍截屏需要Android 11+
//参考https://stackoverflow.com/questions/68646933/does-android-accessibilityservice-take-screenshot-work-on-api-lower-than-30
//截屏
/*
//暂时无法编译
@RequiresApi(api = Build.VERSION_CODES.R)
fun takeScreenshot(): Bitmap =
_takeScreenshot()
private fun _takeScreenshot(): Bitmap {
_baseService.takeScreenshot(Display.DEFAULT_DISPLAY,
getApplicationContext().getMainExecutor(), object : TakeScreenshotCallback() {
@RequiresApi(api = Build.VERSION_CODES.R)
fun onSuccess(@NonNull screenshotResult: ScreenshotResult) {
Log.i("ScreenShotResult", "onSuccess")
val bitmap: Bitmap = Bitmap.wrapHardwareBuffer(
screenshotResult.getHardwareBuffer(),
screenshotResult.getColorSpace()
)
}
fun onFailure(i: Int) {
Log.i("ScreenShotResult", "onFailure code is $i")
}
})
}
*/
当时尝试这样,但是发现很多对象没有定义。 能否增加你所截图所示的功能呢,增加类似@RequiresApi(api = Build.VERSION_CODES.R)可以控制是否可用,在适合的安卓版本使用即可。 谢谢!
//参考https://github.com/Vove7/Android-Accessibility-Api/issues/22
//暂时无法编译
/*
@RequiresApi(api = Build.VERSION_CODES.R)
suspend fun takeScreenshot(): Bitmap? =
_takeScreenshot()
@RequiresApi(Build.VERSION_CODES.R)
private suspend fun _takeScreenshot(): Bitmap? {
val img = suspendCoroutine { cor ->
AccessibilityApi.requireBase.takeScreenshot(
0, act.mainExecutor,
object : AccessibilityService.TakeScreenshotCallback {
override fun onSuccess(screenshot: AccessibilityService.ScreenshotResult) {
cor.resume(Bitmap.wrapHardwareBuffer(screenshot.hardwareBuffer, null))
}
override fun onFailure(errorCode: Int) {
cor.resume(null)
}
})
}
return img
}
*/
尝试加上以上代码,act对象不存在,应该怎么处理?
//参考https://github.com/Vove7/Android-Accessibility-Api/issues/22
@RequiresApi(api = Build.VERSION_CODES.R)
suspend fun takeScreenshot(): Bitmap? =
_takeScreenshot()
@RequiresApi(Build.VERSION_CODES.R)
private suspend fun _takeScreenshot(): Bitmap? {
val img = suspendCoroutine { cor ->
AccessibilityApi.requireBase.takeScreenshot(
0, _baseService.mainExecutor,
object : AccessibilityService.TakeScreenshotCallback {
override fun onSuccess(screenshot: AccessibilityService.ScreenshotResult) {
cor.resume(Bitmap.wrapHardwareBuffer(screenshot.hardwareBuffer, null))
}
override fun onFailure(errorCode: Int) {
cor.resume(null)
}
})
}
return img
}
act --> _baseService
截屏函数看来只是向系统发起截屏的请求,按函数理解,应该截屏后把图截了以后保存到截屏目录,这样存在不能建立调用截屏和保存的文件名称的关系,而且访问也比较麻烦,我网上看好像无障碍是提供截屏的api,但是资料不是很多,不知道作者是否可以配套,要是能截屏后返回BitMap就好了。