通过ADB在Android广播中发送JSON作为额外数据的格式不正确

时间:2015-01-14 09:57:17

标签: android json bash adb

我正在尝试在通过ADB发送到设备的Android广播上发送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!"}'

我期望作为额外数据:

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

我得到的额外数据:

"debug": false

如果我发送{"debug": false "title": "Application update!"}作为额外数据,那么我将{"debug": false "title": "Application update!"}作为额外数据(注意缺少的逗号)。所以我认为它与我的bash的Brace扩展有关,但是关闭它并不能解决问题并且逃避括号或逗号无效。

有人知道我做错了什么吗?

4 个答案:

答案 0 :(得分:19)

你的解决方法是一个巨大的帮助!

它表明问题在于引用两个shell(主机加Android)。壳牌报价是一个可怕的停机坪,但这里有一些严重的怪异。

在尝试使用“echo”命令后,我发现必须将adb shell的参数作为本地shell的单个参数引用,并且必须将JSON有效内容作为Android shell的单个参数引用。

以下是一般解决方案(并且不需要在\引用"!{}字符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,而外部引用远程引用它。该外部对依次为" - 引用。

答案 1 :(得分:5)

好的,我刚刚找到了解决方案。我首先必须通过adb shell输入设备shell,然后执行am broadcast -a com.test.android.ACTION_TEST_FEATURE -n com.test.android/.receivers.TestsReceiver --es "notify" '{"debug": false, "title": "Application update!"}'

答案 2 :(得分:0)

这应该是adb命令的结构。

adb shell "am broadcast -a YOUR_BROADCAST_INTENT_ACTION -n YOUR_APP_PACKAGE/.PATH_TO_BROADCAST_RECIEVER_CLASS.BROADCAST_RECEIVER_CLASS -e 'STRING_KEY' 'DATA HERE'"

上述命令将确保将意图传递给接收者,即使该字符串中有空格。

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

答案 3 :(得分:-1)

我知道这是一个老帖子,但我有一些想法。

在通过cmd和bash args或程序中的子进程进行数据传递之后,我发现使用base64来编码json转储数据非常方便,只需要base64解码然后json加载,不用担心引用,空格,制表符,任何东西