使用adb shell将文本粘贴到Android模拟器剪贴板

18

我需要使用adb shell将文本粘贴到Android模拟器剪贴板中。尝试过在Android 1.6和2.3.1上使用adb shell命令:clipboard: [android.text.iclipboard]。

尝试使用"service call clipboard"命令,其中服务代码分别为1、2和3,用于获取剪贴板文本、设置剪贴板文本和检查剪贴板是否存在文本。

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.....    ')
请指导如何设置模拟器剪贴板的值!

请注意以下有关编程的内容。同时查看https://dev59.com/53A75IYBdhLWcg3wRWoU - ankitjaininfo
6个回答

5
请使用以下命令:

service call clipboard 2 i32 1 i32 18 s16 thisisinsertedtext

我认为第一个参数 "i32 1" 是剪贴板中元素的数量,所以只有一个。第二个参数是字符串的长度。 以上命令的结果如下:

Result: Parcel(00000000 '....') 这通常表示操作成功,没有错误。

因此,我的问题是,是否有办法复制 Unicode 字符串?也就是说,多字节字符集,例如韩语。 我尝试了很多方法,但都失败了。

我怎样可以将4个单词复制到剪贴板中?这是插入的文本。 - Raptorion
我假设你会将字符串放在引号中。 - David M. Karr
4
这个命令行可以在我的Gingerbread模拟器上运行,但在ICS上不行。返回的包裹数据显示“未知包名”。 - David M. Karr
1
第一个 i320 表示清空剪贴板,非零值则表示设置。代码使用 if ((0 != data.readInt())) ...。另外的 i32 编码了文本中的跨度信息(例如加粗)。请查看 com.android.server.ClipboardService 类。 - yingted

5

看起来所有三种旧的方法从API Level 11开始被弃用,因此在ICS上无法工作
不清楚是否仍然有可能使用service call clipboard使其工作...

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


1
adb shell service call clipboard 2 i32 1 i32 1 s16 "你好吗" 结果:Parcel(00000000 '....')
没问题。
"你好吗"是中文字符。
第二个 'i32 1' 可以是任何整数,可能...

-1

有一个开源的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 快得多,无论剪贴板内容的大小,只需一两秒钟。


-1

直接使用adb shell命令在API Level 11及以上版本中无法正常工作。

这里提供了一种解决方案。


-1

尝试这个:

i32:将整数INT写入发送包中。

s16:将UTF-16字符串STR写入发送包中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接