需求提出:
在进行调试的时候,需要进行pc与手机间的文本数据交互,比如把pc上的一个比较长的网址字符串发到手机上,或者把手机上的一些字符串发到pc上
已有方案:
1. 把数据保存到文本中,再传送文本,打开文本,获取数据
2. pc和手机上安装im软件进行通信
这些方法可以实现数据的传送,但是,作为追求快速高效与倾向于敲键盘的专业coder,还可以怎样去实现呢?
把pc上的字符数据到手机上,就用现成的adb input 吧
在手机上点击一个输入框,然后进入adb,使用命令input text实现文字输入
$ input text http://blog.csdn.net/aaajj/article/details/52627192
看着刷刷刷的输入效果,挺有意思的,当然,需要注意下手机输入法。
怎样把手机上的字符串传送到pc控制台呢?
可否利用下手机的剪切板呢?
查了下剪切板的使用方法
ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
String getString = clipboardManager.getPrimaryClip().getItemAt(0).getText().toString();
使用了我们熟悉的getSystemService,看来实现读取剪切板字符数据还是有戏的
自然要使用我们的老朋友dumpsys了
查看源码ClipboardManager.java,有
/**
* Returns the current primary clip on the clipboard.
*/
public ClipData getPrimaryClip() {
try {
return getService().getPrimaryClip(mContext.getOpPackageName());
} catch (RemoteException e) {
return null;
}
}
再查看ClipboardService.java
有
/**
* Implementation of the clipboard for copy and paste.
*/
public class ClipboardService extends IClipboard.Stub {
看到
IClipboard.Stub
就知道了可以使用dumpsys来进行实现,具体分析将在Binder介绍了进行说明
ClipboardService.java里没有dump方法,不妨碍我们进行验证
$ dumpsys clipboard
没有输出,也没有报错
dumpsys -l 的显示里有clipboard
下面就进行实现,在ClipboardService.java里添加方法
@Override
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
pw.println("Get clipboard:");
ClipData cData = getClipboard().primaryClip;
if (cData != null) {
pw.println("" + cData.getItemAt(0).coerceToText(mContext));
}
}
以及对应的import
import java.io.FileDescriptor;
import java.io.PrintWriter;
重新编译
连接adb,在手机上复制一段字符串
然后在adb里
$ dumpsys clipboard
就可以显示出手机剪切板的字符串了