android Tasker和Pydroid之间共享信息

yi0zb3m4  于 2023-03-21  发布在  Android
关注(0)|答案(1)|浏览(146)

我一直在尝试用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代码被常量替换时,手机根本不会死机,所以问题一定与文件访问有关。

nle07wnf

nle07wnf1#

在Tasker中检测修改的文件工作得不太好,过了一段时间就不再工作了,可能是因为系统挂起或检测文件的读/写权限
一个更好且缺陷更少的解决方案可能是使用“am”命令将广播/服务发送到任务执行者以执行某些任务
但是Pydroid没有这个功能
因此,我发现的另一种替代方法是为Tasker创建一个API,发送请求并获得返回的数据
FastAPI示例:

import uvicorn
from fastapi import FastAPI

app = FastAPI()

@app.get('/event')
def event(number: int):
    result = {
        'number': number
    }
    
    return result

if __name__ == '__main__':
    uvicorn.run(app)

以及Tasker中与应用程序通信的操作

Task: HOME - .Test

<Test>
A1: Anchor

A2: Variable Set [
     Name: %value
     To: 50
     Max Rounding Digits: 3
     Structure Output (JSON, etc): On ]

A3: HTTP Request [
     Method: GET
     URL: http://localhost:8000/event
     Query Parameters: number:%value
     Timeout (Seconds): 30
     Structure Output (JSON, etc): On ]

A4: Text/Image Dialog [
     Title: Result
     Text: Number: %http_data.number
     Close After (Seconds): 30 ]

虽然它工作正常,但似乎过了一段时间Pydroid被系统禁用,API也被关闭,但想象一下,这可以通过乱搞电池和挂起设置来解决

相关问题