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


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 , 2 및 3 , 인수 를 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.