Да, вы действительно можете сделать это. Это выглядит глупо, когда вы просматриваете буфер обмена, но он работает просто отлично.
Во-первых, вы можете проверить текущее содержимое буфера обмена с service call clipboard 1помощью оболочки adb (или без шелласа вначале adb shell service call clipboard 1). После перезагрузки он может начинаться с нуля, например:
# service call clipboard 1
Result: Parcel(
0x00000000: 00000000 00000001 00000000 00000000 '................'
0x00000010: 00000000 00000000 '........ ')
#
Вы можете поместить текст в буфер обмена с помощью service call clipboard 2, который в основном принимает 3 параметра - два целых и строку, которую вы хотите поместить в буфер обмена:
# service call clipboard 2 i32 1 i32 0 s16 "Hi there"
Result: Parcel(00000000 '....')
Если честно, я не уверен, каковы первые два параметра. Один из ответов на переполнение стека предполагает, что первое int - это «количество элементов в посылке» (в данном случае один), а второе - длина строки. Тем не менее, я использовал 0 для второго параметра, и он работает нормально, и я не могу найти никакой документации, которая бы соответствовала этой конкретной функции ... так что возьмите это для себя.
В любом случае, это в основном создание объекта Parcel с 3 полями, а затем передача его в буфер обмена. Затем буфер обмена распаковывает Parcel и устанавливает значение строки, переданное как содержимое буфера обмена. Вы можете увидеть это, когда перейдете к получению значения впоследствии:
# service call clipboard 1
Result: Parcel(
0x00000000: 00000000 00000001 00000000 00000008 '................'
0x00000010: 00690048 00740020 00650068 00650072 'H.i. .t.h.e.r.e.'
0x00000020: 00000000 00000000 '........ ')
#
Точно так же, если вы долго нажмете на поле ввода текста и нажмете «Вставить» после этого, вы получите текст, который был установлен через call service clipboard 2строку выше (и это будет выглядеть совершенно нормально).
(Приведенные выше примеры взяты из моего HTC EVO под управлением CyanogenMod 7)