2015-01-14 2 views
11

ADB를 통해 기기로 전송하는 Android 브로드 캐스트에서 JSON 데이터를 추가 전송하려고합니다. 그러나 장치에 도달하는 데이터가 예상 한 것과 같지 않은 것처럼 보입니다.ADB를 통한 안드로이드 브로드 캐스트에서 JSON을 잘못된 형식으로 보냅니다.

내가 실행하는 것 :

"debug": false 

내가 {"debug": false "title": "Application update!"} 등의 추가 데이터를 보낼 경우 : 나는 등의 추가 데이터를 얻을 무엇

{"debug": false, "title": "Application update!"} 

:

adb shell am broadcast -a com.test.android.ACTION_TEST_FEATURE -n com.test.android/.receivers.TestsReceiver -e "notify" '{"debug": false, "title": "Application update!"}' 

가 나는 등의 추가 데이터를 기대하는 것 그럼 난 {"debug": false "title": "Application update!"} 추가 데이터 (누락 된 쉼표로) 얻을. 그래서 나는 그것이 내 bash의 Brace Expansion과 관련이 있다고 가정하지만, 그것을 끄면 문제가 해결되지 않고 중괄호를 벗어나거나 쉼표가 작동하지 않습니다.

누구에게 내가 뭘 잘못하고 있는지 실마리가 있습니까?

+1

약 : "{" "디버그" ": 거짓" "제목" ":" "응용 프로그램 업데이트!" "}"'또는 "디버그 \": ": \"응용 프로그램 업데이트!\ "}"' – Selvin

+0

이것은'debug : false'를 반환합니다 ( –

답변

3

오케이, 방금 해결책을 찾았습니다. 먼저 adb shell을 통해 장치 셸에 들어가서 실행하십시오. am broadcast -a com.test.android.ACTION_TEST_FEATURE -n com.test.android/.receivers.TestsReceiver --es "notify" '{"debug": false, "title": "Application update!"}'

14

해결 방법은 큰 도움이되었습니다!

두 개의 셸 (호스트와 Android)을 통해 인용 할 때 문제가 있음을 나타냅니다. 쉘 인용문은 끔찍한 방울뱀이지만 여기에는 심각한 이상한 것이 있습니다.

"echo"명령을 실험 한 후 adb 쉘의 인수를 로컬 쉘에 대한 단일 인수로 인용해야하며 JSON 페이로드를 Android 쉘에 대한 단일 인수로 인용해야한다는 것을 알았습니다. 여기

는 일반적인 솔루션 (그리고 그것은 "\ -quoting, !, { 및 JSON 텍스트에서 } 문자 뿌리는 필요하지 않습니다) :

adb shell "am broadcast -a com.test.android.ACTION_TEST_FEATURE -n com.test.android/.receivers.TestsReceiver -e notify '"'{"debug": false, "title": "Application update!"}'"'" 

패턴 : adb shell "am broadcast ... '"'JSON_TEXT'"'"

을 내부 쌍인 ' 마크는 JSON_TEXT를 로컬로 인용하는 반면 외부 페어는 원격으로 인용합니다. 그 외부 쌍은 차례로 "- 따옴표입니다.

+0

). GCM 푸시 알림 수신기에 브로드 캐스트하려는 경우 http://stackoverflow.com/a/29425669/1682419를 참조하십시오. 오늘이 두 가지 퍼즐을 해결하는 시간입니다.이 두 가지 질문 및 답변은 ​​엄청난 도움이되었습니다.) – Jerry101

+1

"셸 인용문은 끔찍한 타피트입니다." –

-1

나는 이것이 오래된 게시물 인 것을 알고 있지만, 나는 약간의 생각을 가지고있다.

cmd와 bash 인수 또는 프로그램의 하위 프로세스를 통해 데이터를 전달하는 데 어려움을 겪은 후 json이 덤프 된 데이터를 인코딩하기 위해 base64를 사용하는 것이 매우 편리하고 기본 코드를 디코드 한 다음 json을로드하고 따옴표, 아무것도.

0

이것은 adb 명령의 구조 여야합니다.

위의 명령을 사용하면 문자열에 공백이 있어도 수신자에게 의도를 전달할 수 있습니다.

adb shell "am broadcast -a wingoku.custom.invoking.event -n com.wingoku.root/.broadcastReceivers.MyReceiver-e 'shellCommand' 'hello world. My name is umer'" 
관련 문제