#android #shell #command-line #adb
#Android #оболочка #командная строка #adb
Вопрос:
Я работаю с adb shell
командной строкой для обмена данными между Android Studio
и Emulator
.
Я начал 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 string),
Затем я не могу получить правильный ВЫВОД ЖУРНАЛА с 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
формат заполнения командной строки, пожалуйста, сообщите мне,
Спасибо,
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:
Следующее сработало для меня в примере 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: действие - com.example.TEST_ACTION D/MEOW33: MyReceiver: onReceive: jsonStr - {field1: value1, field2:123} D/MEOW33: MyReceiver: onReceive: создан объект json - {"field1": "value1", "field2":123}