2016-07-05 99 views
4

我尝试使用下面的听众得到的文本复制到剪贴板:将文本复制到剪贴板Android如何从剪贴板onPrimaryClipChanged获取字符串?

ClipboardManager clipBoard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE); 
clipBoard.addPrimaryClipChangedListener(new ClipboardListener()); 

onPrimaryClipChanged被激发:

import android.content.ClipboardManager.OnPrimaryClipChangedListener; 
import com.orhanobut.logger.Logger; 

public class ClipboardListener implements OnPrimaryClipChangedListener 
{ 

    public void onPrimaryClipChanged() 
    { 
     // do something useful here with the clipboard 
     // use getText() method 
     Logger.d("Clipped"); 
    } 
} 

如下侦听器初始化,但我不知道如何使用ClipboardManager.getPrimaryClip()获取此方法中的复制文本,因为该方法在上下文中不可用,并且不在onPrimaryClipChanged的参数中传递。

回答

7

我会建议添加侦听器,如下所示,而不是创建一个新的类。我已经包括了如何从ClipData中获取文本。

您提到无法在侦听器中访问您的上下文,我在下面的代码中添加了一条注释,说明如何操作。

ClipboardManager clipBoard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE); 
clipBoard.addPrimaryClipChangedListener(new OnPrimaryClipChangedListener() { 

    @Override 
    public void onPrimaryClipChanged() { 
     ClipData clipData = clipBoard.getPrimaryClip(); 
     ClipData.Item item = clipData.getItemAt(0); 
     String text = item.getText().toString(); 

     // Access your context here using YourActivityName.this 
    } 
}); 
+0

它抛出空指针异常: 显示java.lang.NullPointerException:尝试在空对象引用调用接口方法“java.lang.String中java.lang.CharSequence.toString()” – redrom

+0

你可能会必须添加对item.getText()为null的安全检查,因为onPrimaryClipChanged被触发时ClipBoard中没有文本。 –

+0

有没有办法在iOS中获得这种类型的ClipBoard数据? @KarenForde –