Вставка текста в буфер обмена эмулятора Android с помощью оболочки adb
Мне нужно вставить текст в буфер обмена эмулятора Android с помощью оболочки adb. пробовал на Android 1.6 и 2.3.1
Я пытался использовать команду оболочки adb: clipboard: [android.text.iclipboard]
"буфер обмена служебного вызова", где служебные коды равны 1, 2 и 3, для getClipboardText, setClipboardText и hasClipboardText соответственно.
service call clipboard 2 s16 thisisinsertedtext
похоже не работает пока
service call clipboard 1
показывает содержимое буфера обмена:
service call clipboard 1
Result: Parcel(
0x00000000: 00000000 00000001 00000001 00000004 '................'
0x00000010: 00650074 00740078 00000000 't.e.x.t..... ')
Посоветуйте, пожалуйста, как установить значение для буфера обмена эмулятора!
6 ответов
Используйте команду ниже.
буфер обмена служебных вызовов 2 i32 1 i32 18 s16 thisisinsertedtext
Я думаю, что первый "i32 1" - это количество элементов в буфере обмена. Итак, только один. Второе - это длина строки. Команда, написанная выше, показывает...
Результат: Посылка (00000000 '....') Обычно это означает, что ОК, ошибок нет.
Итак, мой вопрос, есть ли способ скопировать строку Unicode? Я имею в виду, многобайтовые наборы символов, как корейский. Я пробовал много способов, но это не удалось.
Похоже, что все 3 старых метода устарели начиная с уровня API 11, поэтому он не будет работать для ICS
Не ясно, возможно ли вообще заставить его работать с буфером обмена служебными вызовами...
static final int TRANSACTION_getClipboardText 1
static final int TRANSACTION_hasClipboardText 3
static final int TRANSACTION_setClipboardText 2
www.androidjavadoc.com/1.0_r1_src/constant-values.html
http://developer.android.com/reference/android/content/ClipboardManager.html
http://developer.android.com/guide/topics/text/copy-paste.html
Буфер обмена вызова службы оболочки adb 2 i32 1 i32 1 s16 "你好吗"
Результат: Посылка (00000000 '....')
Все в порядке.
"你 好吗" - китайский иероглиф.
Второй 'i32 1' может быть любым целым числом, может быть...
Использование команды оболочки adb напрямую не работает, начиная с уровня API 11.
Вот решение.
Попробуй это:
i32: записать целое число INT в посылку.
s16: записать строку STR UTF-16 в посылку.
Существует открытый скрипт Python, который может справиться с серьезными ограничениями: https://github.com/gcb/AdbPaste - и он работает достаточно хорошо, за исключением того, что загрузка длинного файла буфера обмена невероятно медленная (200-строчный текстовый файл может занять 20 минут).
Я нашел некоторый код на GitHub для приложения под названием clipper, которое может использовать adb для заполнения буфера обмена с помощью широковещательных намерений. Я улучшил его для чтения из файла, расширенный код здесь: https://github.com/RoundSparrow/clipper
Сборка приложения, установка на устройство. Теперь я могу использовать команды ADB для заполнения буфера обмена через файл. Работает как шарм для 3-страничного скрипта, который мне нужно загрузить. По сути, вы используете так:
adb push clipboard_content_file.txt /sdcard/clipboard_content_file.txt
adb shell am broadcast -a clipper.setfile -e filepath \'/sdcard/clipboard_content_file.txt\'
Это намного быстрее AdbPaste, это займет всего секунду или две, независимо от размера содержимого буфера обмена.