Так, ви насправді можете це зробити. Це дивовижно виглядає, коли ви оглядаєте буфер обміну, але це працює просто чудово.
Спочатку ви можете перевірити поточний вміст буфера обміну з 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-х полів, а потім передавання його в буфер обміну. Потім буфер обміну розпаковує посилку і встановлює значення рядка, передане як вміст буфера обміну. Це можна побачити, коли ви перейдете до отримання значення згодом:
# 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)