我一直在尝试用pydroid和Tasker在手机上制作一个识别图像的应用程序。
我使用Tasker每5秒钟截图一次,保存后显示最近的结果。
在Pydroid中,我打开屏幕截图,分析它并将结果写入一个文本文件,然后由Tasker访问。
有时候,当文件被其中一个应用程序打开,另一个试图访问它时,我的手机只是崩溃并重新启动。
我的问题是,我如何在pydroid(或tasker)中检测其他应用程序是否正在使用该文件,并等待直到该文件可以安全访问?
下面是我的Tasker任务:%Enabled
由其他任务控制
A1: Flash [
Text: Enabled
Continue Task Immediately: On
Dismiss On Click: On ]
A2: Variable Set [
Name: %Enabled
To: True
Max Rounding Digits: 3
Structure Output (JSON, etc): On ]
A3: Take Screenshot [
File: /storage/47BE-16F5/folder/screenshot.png ]
A4: Read File [
File: /storage/47BE-16F5/folder/text.txt
To Var: %text
Structure Output (JSON, etc): On ]
A5: Flash [
Text: %text
Continue Task Immediately: On
Dismiss On Click: On ]
A6: Wait [
MS: 0
Seconds: 5
Minutes: 0
Hours: 0
Days: 0 ]
A7: Goto [
Type: Action Number
Number: 3 ]
If [ %Enabled eq True ]
下面是相关的python代码:
from PIL import Image
screenshot = Image.open("/storage/47BE-16F5/folder/screenshot.png")
...
with open(TEXT_DIR, 'w', encoding="utf-8") as f:
f.write(results)
我试过用try-except循环来封装python代码,但是我不知道异常到底是什么,因为每次在错误信息打印出来之前,手机都会崩溃。
而且,当相关的python代码被常量替换时,手机根本不会死机,所以问题一定与文件访问有关。
1条答案
按热度按时间nle07wnf1#
在Tasker中检测修改的文件工作得不太好,过了一段时间就不再工作了,可能是因为系统挂起或检测文件的读/写权限
一个更好且缺陷更少的解决方案可能是使用“am”命令将广播/服务发送到任务执行者以执行某些任务
但是Pydroid没有这个功能
因此,我发现的另一种替代方法是为Tasker创建一个API,发送请求并获得返回的数据
FastAPI示例:
以及Tasker中与应用程序通信的操作
虽然它工作正常,但似乎过了一段时间Pydroid被系统禁用,API也被关闭,但想象一下,这可以通过乱搞电池和挂起设置来解决