Да, вы действительно можете сделать это. Это выглядит глупо, когда вы просматриваете буфер обмена, но он работает просто отлично.
Во-первых, вы можете проверить текущее содержимое буфера обмена с 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)