2015-01-14 3 views
11

मैं एंड्रॉइड प्रसारण पर अतिरिक्त जेएसओएन डेटा भेजने की कोशिश कर रहा हूं, जिसे मैं डिवाइस पर एडीबी के माध्यम से भेजता हूं। लेकिन ऐसा लगता है कि डिवाइस पर आने वाले डेटा की अपेक्षा नहीं है।एडीबी के माध्यम से एंड्रॉइड प्रसारण में अतिरिक्त डेटा के रूप में जेएसओएन भेजना गलत तरीके से स्वरूपित हो जाता है

मैं क्या निष्पादित करें:

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

मैं के रूप में अतिरिक्त डेटा क्या मिलता है::

"debug": false 

अगर मैं {"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!"} मिलता है। तो मुझे लगता है कि यह मेरे बैश के ब्रेस विस्तार के साथ कुछ करने के लिए है, लेकिन इसे बंद करने से समस्या हल नहीं होती है और ब्रेसिज़ से बचने या कॉमा काम नहीं कर रहा है।

क्या किसी के पास कोई सुराग है कि मैं क्या गलत कर रहा हूं?

+1

किस बारे में: '" { "" डिबग "" झूठे "" शीर्षक "": "!" आवेदन अद्यतन ""} "' या '" {\ "डिबग \": असत्य \ "शीर्षक \ ": \" अनुप्रयोग अद्यतन!\ "}" ' – Selvin

+0

यह रिटर्न 'डीबग: झूठा' :( –

उत्तर

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

निष्पादित करना होगा आपका कामकाज बहुत मददगार था!

यह इंगित करता है कि समस्या दो गोले (मेजबान प्लस एंड्रॉइड) के माध्यम से उद्धरण में है। शेल उद्धरण एक भयानक टैरपिट है लेकिन यहां गंभीर अतिरिक्त अजीबता है।

"गूंज" आदेशों के प्रयोग के बाद, मैंने पाया कि एडीबी शैल के तर्क को स्थानीय खोल के लिए एक तर्क के रूप में उद्धृत किया जाना चाहिए और जेएसओएन पेलोड को एंड्रॉइड खोल के लिए एक तर्क के रूप में उद्धृत किया जाना चाहिए।

यहाँ एक सामान्य समाधान है (और यह " की \ -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 उद्धृत करती है जबकि बाहरी जोड़ी इसे दूरस्थ रूप से उद्धृत करती है। उस बाहरी जोड़ी बदले में " -quoted है।

+0

बीटीडब्ल्यू अगर आप जीसीएम पुश अधिसूचना रिसीवर को प्रसारित करना चाहते हैं, तो http://stackoverflow.com/a/29425669/1682419 देखें। (मैंने रास्ता बहुत अधिक खर्च किया आज इन दो पहेली को हल करने का समय। इन दो SO प्रश्नों और उत्तरों ने बहुत मदद की।) – Jerry101

+1

प्लस वन "शेल उद्धरण एक भयानक टैरपिट है।" –

-1

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन मेरे पास कुछ विचार हैं।

cmd और bash args, या प्रोग्राम में सबप्रोसेस के माध्यम से डेटा पास करने के संघर्ष के बाद, मुझे जेसन डंप किए गए डेटा को एन्कोड करने के लिए बेस 64 का उपयोग करना बेहद सुविधाजनक है, बस बेस 64 डीकोड और फिर जेसन लोड, उद्धरण, स्थान, टैब, कुछ भी।

0

यह एडीबी कमांड की संरचना होनी चाहिए।

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'" 
संबंधित मुद्दे

 संबंधित मुद्दे