其他分享
首页 > 其他分享> > android-使用getPrimaryClip()复制给出的数据给定{text / plain {NULL}}

android-使用getPrimaryClip()复制给出的数据给定{text / plain {NULL}}

作者:互联网

我在使用ClipData时得到{text / plain {NULL}}的信息,但是如果我使用了不推荐使用的方法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());
}

更新资料

三星银河标签3中存在问题.

Samsung Galaxy Tab 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);
        }
    }
}

标签:clipboardmanager,android
来源: https://codeday.me/bug/20191119/2036515.html