Копирование данных с использованием getPrimaryClip(), давая { text/plain {NULL} }

Я получаю { 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 ответ

Решение

Причина вашей проблемы неизвестна. поскольку он работает на устройстве, которое я тестировал (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 возвращает ноль:

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);
        }
    }
}
Другие вопросы по тегам