Отправить строку json на эмулятор | устройство через командную строку оболочки adb в Android - PullRequest
0 голосов
/ 14 марта 2019

Я работаю с adb shell командной строкой для связи между Android Studio и Emulator.

I запущен Activity с Bundle extras (например, Строка , Int ...), которую я отправляю из adb командной строки, Все в порядке .

adb shell am start -W -a android.intent.action.VIEW -d "sheme://host/pathPrefix" --es extra_video "videoKey=xxx"

Теперь я пытаюсьсделать то же самое, но с другой Bundle extras ( строка JSON ),

Тогда я не смогу исправить LOGВЫХОД с форматом JSON string.

Я не уверен, что заполнил командную строку точно .

adb shell am start -W -a android.intent.action.VIEW -d "sheme://host/pathPrefix" 
--es extra_video "{\"name\":\"abc\",\"place\":\"xyz\"}"
// LOG OUTPUT : data = Bundle[{extra_recommendation_video=name:abc}]

adb shell am start -W -a android.intent.action.VIEW -d "sheme://host/pathPrefix" 
--es extra_video "{"name":"abc","place":"xyz"}"
// LOG OUTPUT : data = Bundle[{extra_recommendation_video=name:abc}]

adb shell am start -W -a android.intent.action.VIEW -d "sheme://host/pathPrefix" 
--es extra_video "{'name':'abc','place':'xyz'}"
// LOG OUTPUT : data = Bundle[{extra_recommendation_video=name:abc}]

Я хочу получить такой же выводв качестве входа .(Правильный вывод журнала: data = Bundle[{extra_recommendation_video={"name":"abc","place":"xyz"}])

Люди, которые знают правильный формат JSON string, заполняют командную строку, пожалуйста, подробно,

Спасибо,

enter image description here

p / s: приведенные ниже коды точно, проблема только в input из командной строки.

Manifest.xml

<activity
        android:name=".MainActivity"
        android:launchMode="singleInstance">

        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.DEFAULT" />

            <!--scheme://host/pathPrefix-->
            <data
                android:host="host"
                android:pathPrefix="/pathPrefix"
                android:scheme="scheme" />

        </intent-filter>

    </activity>

MainActivity.java

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(contentView);

    if (getIntent() != null) {
        Video video = null;

            if (getIntent().getExtras() != null) {
                String data = getIntent().getExtras().getString(EXTRA_VIDEO);

                // LOG OUTPUT HERE IS WRONG FORMAT, NOT IS JSON STRING FORMAT
                Log.d(LogcatConstants.LIFE_CYCLE, " data = " + data); 

                video = TVApp.GSON.fromJson(data, Video.class);
            }

        if (video != null) {
            Intent i = new Intent(this, VideoActivity.class);
            i.putExtra(VideoPlayerActivity.EXTRA_VIDEO, gson.toJson(video));
            startActivity(i);
        }
    }

}

1 Ответ

0 голосов
/ 14 марта 2019

Следующее работает для меня на примере BroadcastReceiver (должно работать и для вас):

    adb shell am broadcast -n com.example.myapp/com.example.myapp.MyReceiver -a com.example.TEST_ACTION --es extra_video "{field1:\ value1\,\ field2:123}"

Так что, по-видимому, экранирование требует только пробелы и запятые.Вероятно, и апострофы.Код BroadcastReceiver:


    public class MyReceiver extends BroadcastReceiver {
        public static final String TAG = "MEOW33";

        public static final String EXTRA_KEY_VIDEO = "extra_video";

        @Override
        public void onReceive(Context context, Intent intent) {

            if (null == intent)
                return;

            Log.d(TAG, "MyReceiver: onReceive: action - "+intent.getAction());

            if (!intent.hasExtra(EXTRA_KEY_VIDEO)) {
                Log.w(TAG, "MyReceiver: onReceive: NO EXTRA, abort");
                return;
            }

            String jsonStr = intent.getStringExtra(EXTRA_KEY_VIDEO);
            Log.d(TAG, "MyReceiver: onReceive: jsonStr - "+jsonStr);
            try {
                JSONObject json = new JSONObject(jsonStr);
                Log.d(TAG, "MyReceiver: onReceive: json object created - "+json);
            }
            catch (JSONException je){
                Log.e(TAG, "MyReceiver: onReceive: SHAME ON YOU! exception: "+je.getMessage());
            }

        }
    }

Выход Logcat:


    D/MEOW33: MyReceiver: onReceive: action - com.example.TEST_ACTION
    D/MEOW33: MyReceiver: onReceive: jsonStr - {field1: value1, field2:123}
    D/MEOW33: MyReceiver: onReceive: json object created - {"field1":"value1","field2":123}

...