我有一个Android应用程序,当单击一个按钮时,它启动后台服务(在自己的进程中运行)。此服务连接到在UI中指定IP的远程计算机。
此服务启动一个创建连接的线程。如果连接成功,则启动另外两个线程(一个用于处理发送和另一个用于处理数据接收)。
后两个线程中的一个(发送一个)应该监视剪贴板的更改并获取更改的文本以进行处理。为此,我在线程的run
方法中有以下代码:
final ClipboardManager clipBoard = (ClipboardManager)appContext.getSystemService(Context.CLIPBOARD_SERVICE);
if(clipBoard != null) {
clipBoard.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
@Override
public void onPrimaryClipChanged() {
if(clipBoard.hasPrimaryClip()) {
if(clipBoard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) {
ClipData.Item textItem = clipBoard.getPrimaryClip().getItemAt(0);
String text = textItem.getText().toString();
if(text != null) {
//do something with the text
}
}
}
}
});
}
但是,在运行应用程序时,我收到错误:
Can't create handler inside thread which has not called Looper.prepare()
。
我读到了关于Loopers的内容,但我不明白如何在我的案例中使用它。我该怎么做才能解决这个错误?
答案 0 :(得分:0)
如果没有更多代码,很难准确说出,但问题可能是OnPrimaryClipChangedListener
在其实施中使用Handler
,Handler
必须按照定义调用Looper.prepare()
。< / p>