在 Tasker 和 Pydroid 之间共享信息

问题描述 投票:0回答:1

我一直在尝试使用 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)

我试图将 python 代码包装在一个 try-except 循环中,但我不知道异常到底是什么,因为每次打印错误消息之前手机都会崩溃。

另外,把相关的python代码换成常量后,手机就完全不死机了,肯定是文件访问问题。

python android share tasker pydroid
1个回答
0
投票

在 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 被关闭,但想象一下这可以通过弄乱电池和暂停设置来解决

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