gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:52:27 29 4
gpt4 key购买 nike

当我使用 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());
}

更新

Samsung galaxy Tab 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,作为解决方法,您可以使用此方法的部分源代码(特别是方法 coerceToText() ),如果调用推荐的 API 返回 null:

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);
}
}
}

关于android - 使用 getPrimaryClip() 复制数据给定 { text/plain {NULL} },我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33535656/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com