작업에서 변수 값을 보내고받는 방법?


9

나는 Cyanogen OS 12와 Tasker v4.8 을 기반으로 한 OnePlus One을 가지고 있습니다. 종료 할 때 Tasker의 작업을 실행 해야하는 PC에 bash 스크립트가 있습니다. SSHDroid (또는 adb shell)를 통해 tasker task 실행이라는 질문 을 보았지만 허용 된 답변이 Android에서 작동하지 않지만 해결책은 매우 간단합니다. 작업을 호출하려면 다음을 수행하십시오.

adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "TASK_NAME"   

그러나 이것이 내가 할 수있는 전부입니다. 종료하는 동안 스크립트 결과에 따라 장치에서 처리를 계속할 수 있도록 스크립트가 종료 상태를 작업으로 전달해야합니다.

호출 작업을위한 공식 가이드는 그 날을 도움이되지 않았다, 그래서 프로그래머를위한 것입니다. 스레드 당 를 통해 인 텐트를 통한 작업 실행 변수 값을 전달하는 다양한 방법을 시도했지만 아무 소용이 없습니다.

다른 작업에서 작업을 호출하면 두 변수를 사용하여 값을 전달할 수있는 유연성이 제공됩니다. 이 두 변수는 이름 %par1및을 사용하여 호출 된 태스크에서 수신 할 수 있습니다 %par2. 데모 작업에서 내가하고있는 일은 Alert → Flash → Text → Show me: %arg1 %par1입니다.

# 데모 용으로 "lol"이라는 작업을 만들었습니다.

adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol"--es "varNames" "par1"--es "varValues" "수신 됨"
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol"--es "varNames" "% par1"--es "varValues" "수신 됨"
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol"--es "varNames" "Par1"--es "varValues" "수신"# 또한 변경됨 작업에서 변수 이름 par1 ~ Par1
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol"--es "varNames" "% Par1"--es "varValues" "수신 됨"  

상기 명령은 모두이 출력으로 실행됩니다

Broadcasting: Intent { act=net.dinglisch.android.tasker.ACTION_TASK (has extras) }
Broadcast completed: result=0

이 방송을 보내도 작동합니다

adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK -d "task:lol" --es "arg1" "received"  # I setup a profile to listen to this intent and receive extra from it in a task linked to profile

그러나 작업을 직접 호출 한 다음 변수 값을 전송해도 아무런 효과가 없습니다.

따라서 내 접근 방식의 결함은 어디에 있습니까? 및 / 또는 명령 줄을 사용하여 작업에서 변수 값으로 보내고받는 방법은 무엇입니까?

참고 내가 해결 방법을 찾고 아니에요. 장치의 스크립트에서 종료 상태를 수신하는 많은 해결 방법을 완벽하게 제시 할 수는 있지만 의도를 사용하는 것이 가장 간단한 해결책 인 것처럼 보이며이 기술도 배우고 싶습니다.

최신 정보

나는 다음과 같은 질문을 제기했다.

이 답변은 Pent로부터 이메일과 포럼을 통해 받았습니다.

-e를 사용하여 adb 호출에 추가로 StringArrayList를 추가 할 수 있어야합니다. adb가이를 수행 할 수 있는지 모릅니다.

그렇다면 형식을 보려면 java를 이해하는 경우 addLocalVariable 함수 인 TaskerIntent.java http://tasker.dinglisch.net/code/TaskerIntent.java를 볼 수 있습니다 .

이것이 바로이 질문을 게시 한 후 나중에 예상 했던 것 입니다.

여기에 대한 답변 따라 adb를 사용하여 문자열 배열을 전달할 수 있다고 생각합니다. 그래서 몇 가지 쿼리를 시도했지만 다시 막 다른 골목을 만났습니다.

adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol"--es "varNames" '{ "arg1"}'--es "varValues" '{ "시간 "} '
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol"--es "varNames" '{ "par1"}'--es "varValues" '{ "시간 "} '
adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es "task_name" "lol"--es "varNames" '{ "par1"\, "arg1"}'--es "varValues " '{"받은 "\,"다시 "}'

또한 의도를 URI로 변환하고 의도 am to-intent-uriURI를 직접 보내려고했지만 성공하지 못했습니다.

새로운 업데이트

판독 값을 기준으로합니다 . 1 , 23 , 인수 를 adb shell am사용하여 문자열 배열을 전달할 수 있다고 확신합니다 --esa. 예:

adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --esa "par" "lol, cat"    # value lol goes in par1 variable and value cat goes in par2 variable

즉,이 쿼리는 여전히 실패합니다.

adb shell su -c am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es task_name "lol" --esa varNames "arg1, par1" --esa varValues "lol, cat"

새로운 업데이트 # 2

재고 Android 6.0.1을 테스트 장소로 사용할 수 있습니다.


문자열 배열을 전달해야한다고 생각하기 시작했으며 그 진행 방법을 모릅니다.
Firelord

이 권한을 읽으면 확실하지 않은 경우 adb 스크립트가 완료되면 tasker의 작업에 변수를 전달해야합니까? 그러나 tasker의 태스크는이 변수를 수신하지 않으므로 변수를 수신하려고합니다. 내가 올바른 길을 가고 있습니까?
Matt07211

그것은 bash 스크립트이지만, 결국 adb를 사용하여 작업을 호출하고 변수를 보내려고합니다.
Firelord

좋아, 내가 있으면, 그리고 행운을 빕니다를 찾으면 유용한 정보를 게시 할 것입니다
Matt07211

바보처럼 들리면 실례합니다. 당신은 분명히 나보다 Tasker에서 더 발전했기 때문입니다. 그러나 종료하기 전에 스크립트가 변수 데이터를 텍스트 파일에 쓰도록 한 다음 Tasker가 특정 조건에서 해당 파일을 읽도록 설정할 수는 없었습니다. 그것의 변수?
pure. 님이

답변:


1

@firelord의 조사 결과와 am인앱 문서 (의 출력 am, 인수 없음)를 기반으로합니다. 이것은 6.0.1을 실행하는 휴대 전화에서 작동했습니다.

$ su -c 'am broadcast -a net.dinglisch.android.tasker.ACTION_TASK --es task_name TASK_NAME --esal varNames %VAR_NAME1,%VAR_NAME2 --esal varValues VAR_VALUE1,VAR_VALUE2'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.