Как установить буфер обмена в эмуляторе Android на бутерброд с мороженым?

Я нашел решение командной строки для установки текста буфера обмена в Gingerbread AVD, но эта командная строка не работает, когда я запускаю ICS AVD.

С этой страницы я создал скрипт: вставка текста в буфер обмена эмулятора Android с помощью оболочки adb.

Опять же, это прекрасно работает для записи в буфер обмена и чтения содержимого, если я использую Gingerbread AVD, но когда я пишу в буфер обмена ICS, возвращаемая посылка просто говорит "Неизвестный пакет", и когда я пытаюсь читать буфер обмена, кажется, чтобы вернуть пустую строку.

2 ответа

Вот как это сделать:

Я использую основной метод, который принимает параметр oldApi, когда false использует старые API-интерфейсы Clip Android, а когда true - новые API-интерфейсы Clip.

Полный проект: https://github.com/daniel-c05/LightClipper/blob/master/src/com/deadpixels/light/clipper/utils/ClipHelper.java

/**
 * 
 * @param context The context
 * @param label The label to show to the user via {@code ClipDescription}
 * @param value The actual value to store on the clipboard via {@link ClipHelper#addItemToClipboard(Context, String, String)}
 * @param oldAPI Whether or not we are running on pre-HoneyComb API.
 */
public static void addItemToClipboard(final Context context, final String label, final String value, final boolean oldAPI) {
    if (oldAPI) {
        addTextToClipboard(context, value);
    }
    else {
        addItemToClipboard(context, label, value);
    }
}

/**
 * This is only called when oldAPi is passed as false on {@link #addItemToClipboard(Context, String, String, boolean)}
 * @param context The context, required to get the Cliboard System Service. 
 * @param label The label to show to the user via {@code ClipDescription}
 * @param value The value to store on the clipboard. 
 */
@SuppressLint("NewApi")
private static void addItemToClipboard (final Context context, final String label, final String value) {
    ClipboardManager manager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
    ClipData.Item item = new Item(value);
    ClipDescription description = new ClipDescription(label, new String [] {ClipDescription.MIMETYPE_TEXT_PLAIN});
    ClipData data = new ClipData(description, item);
    manager.setPrimaryClip(data);               
}

/**
 * This is only called when oldAPi is passed as true on {@link #addItemToClipboard(Context, String, String, boolean)}
 * @param context The context, required to get the Cliboard System Service. 
 * @param value The value to store on the clipboard. 
 */
@SuppressWarnings("deprecation")
private static void addTextToClipboard (final Context context, final String value) {
    android.text.ClipboardManager manager = (android.text.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
    manager.setText(value);         
}

Я надеюсь, что эта ссылка примера будет работать для вашего ответа. Build Target этого проекта: Android 4.0, который будет работать на эмуляторе ICS.

http://www.edumobile.org/android/android-tutorial/clipboard-example-in-android-development/

В этом примере показано, как использовать менеджер буфера обмена для копирования текста / намерений / URL в Android.

Другие вопросы по тегам