2015-01-14 15 views
11

私はADB経由でデバイスに送信するAndroidブロードキャストでJSONデータを余分に送信しようとしています。しかし、デバイスに届くデータが期待どおりでないように見えます。私は実行何ADB経由のアンドロイドブロードキャストで余分なデータとして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 "title": "Application update!"}を送信する場合

"debug": false 

を私は{"debug": false "title": "Application update!"}を余分なデータ(欠落しているカンマに注意)として取得します。だから私はそれが何かをブレース拡張私のbashのと思うが、それをオフにして問題を解決していないと中括弧をエスケープするか、またはコンマが動作していません。

誰かが私が間違っていることを知っていますか?

+1

約: "" "デバッグ" ":偽" "タイトル" ":" "アプリケーションのアップデート!" "}" 'または{\"デバッグ\ ": ":\"アプリケーションのアップデート!\ "}" ' – Selvin

+0

これは' debug:false'を返します:( –

答えて

3

[OK]をクリックして解決策を見つけました。私は最初に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

あなたの回避策は大きな助けでした!

これは、問題が2つのシェル(ホストとAndroid)で引用していることを示しています。シェルクォートは恐ろしいタペットですが、そこには深刻な余計な奇妙なことがあります。

「echo」コマンドを試した結果、adbシェルの引数をローカルシェルの引数として引用する必要があり、JSONペイロードをAndroidシェルの単一引数として引用する必要があることがわかりました。

ここでは一般解(と、それはJSONテキストに"!{\ -quoting、および}文字を振りかける必要ありません)です:

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を参照してください。今日のこれらの2つのパズルを解決する時間です。この2つのSOの質問と回答は非常に助けになりました。) – Jerry101

+1

"シェルクォートはひどいタペットです。 –

-1

私は、これは古い記事ですけど、私はいくつかの考えを持っています。

cmdとbashのargs、またはプログラムのサブプロセスを介してデータを渡すのが苦労した後、私はbase64を使用してjsonのダンプ済みデータをエンコードすると非常に便利で、base64をデコードしてからjsonを読み込み、何でも

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'" 
関連する問題