使用getPrimaryClip()复制数据,给出{text / plain {NULL}}

时间:2015-11-05 02:29:19

标签: android clipboardmanager

我在使用{ text/plain {NULL} }时收到ClipData但是如果我使用弃用的方法mClipboard.getText(),它的工作正常。

if (mClipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) {
    ClipData clipData = mClipboard.getPrimaryClip();
    ClipData.Item item = clipData.getItemAt(0);
    Log.d(TAG, clipData.toString());
    Log.d(TAG, mClipboard.getText());
}

更新

Samsung galaxy Tab 3中存在问题。

Samsung Galaxy Tab 3

1 个答案:

答案 0 :(得分:3)

您遇到问题的原因尚不清楚。因为它适用于我测试过的设备(S6 5.0)。您可能希望查看已弃用的getText()方法的实现:

public CharSequence getText() {
    ClipData clip = getPrimaryClip();
    if (clip != null && clip.getItemCount() > 0) {
        return clip.getItemAt(0).coerceToText(mContext);
    }
    return null;
}

为了获得文本它使用方法coerceToText()。根据这种方法的描述:

     * Turn this item into text, regardless of the type of data it
     * actually contains.

因此,我认为方法getText()的弃用是由于性能问题或其他因素造成的。

反正。由于方法getText()使用的API未被弃用,因此如果调用推荐的API返回null,则可以使用此方法的某些部分(特别是方法coerceToText())作为解决方法:

ClipboardManager mclipboard =(ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
boolean isTextPlain = mclipboard.getPrimaryClip().getDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN);
    CharSequence text = null;
if (isTextPlain){
    ClipData clipData = mclipboard.getPrimaryClip();
    ClipData.Item item = clipData.getItemAt(0);
    if (  item!= null ){
        text = item.getText();
        if (text == null){
            // taken from source of clipData.getText() method
            text =  item.coerceToText(this);
        }
    }
}