2015-11-05 49 views
2

當我使用ClipData時,我得到{ text/plain {NULL} },但如果使用已棄用的方法mClipboard.getText(),它工作得很好。使用getPrimaryClip()賦予{text/plain {NULL}}複製數據

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

更新

問題存在於三星Galaxy Tab 3

Samsung Galaxy Tab 3

+0

嘿無法重現此問題。我只是複製並過去了你的代碼,然後在它運行的設備上進行了測試。這裏是截圖 http://imgur.com/EBPsLVP 你如何複製數據並讓你在真實設備上進行測試? – ProblemSlover

+0

@ProblemSlover它是三星Galaxy S4和銀河標籤。我明天會發布截圖。 – mjosh

+0

我的回答對你有幫助嗎? – ProblemSlover

回答

2

你的問題的原因是未知的。因爲它適用於我測試過的設備(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返回使用此方法(具體方法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); 
     } 
    } 
}