Вставка текста в буфер обмена эмулятора Android с помощью оболочки adb - PullRequest
15 голосов
/ 02 сентября 2011

Мне нужно вставить текст в буфер обмена эмулятора 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 ]

6 голосов
/ 28 сентября 2011

Используйте приведенную ниже команду.

буфер обмена служебного вызова 2 i32 1 i32 18 s16 thisisinsertedtext

Я думаю, что первое, "i32 1", это количество элементовв буфер обмена.Итак, только один.Второе - это длина строки.Команда, написанная выше, показывает ...

Результат: Посылка (00000000 '....') Обычно это означает, что ОК, ошибок нет.

Итак, мой вопросесть ли способ скопировать строку Unicode?Я имею в виду многобайтовые наборы символов, например, корейский.Я пробовал много способов, но это не удалось.

5 голосов
/ 05 августа 2012

Похоже, что все 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 / постоянного values.html
http://developer.android.com/reference/android/content/ClipboardManager.html
http://developer.android.com/guide/topics/text/copy-paste.html

1 голос
/ 16 декабря 2011

буфер обмена служебных вызовов оболочки adb 2 i32 1 i32 1 s16 "你 好吗"

Результат: Посылка (00000000 '....')

Это нормально.

"你 好吗" - китайский иероглиф.

Второй 'i32 1' может быть любым целым числом, может быть ...

0 голосов
/ 25 мая 2017

Существует открытый скрипт 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, это занимает всего секунду или две, независимо от размера содержимого буфера обмена.

0 голосов
/ 20 мая 2015

Использование команды оболочки adb напрямую не работает с API уровня 11.

Здесь является решением.

0 голосов
/ 04 июня 2012

Попробуйте это:

i32: запишите целое число INT в посылку отправки.

s16: запишите строку UTF-16 STR в посылку отправки.

...