Nanfeng

Notes on software development, code, and curious ideas

Accessing the Android Clipboard from Cocos Creator

Copy-and-paste support in a native Android build requires a bridge between TypeScript and Java.

Java imports:

1
2
3
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;

Copy text in AppActivity.java or an appropriate native helper:

1
2
3
4
5
public static void copyToClipboard(String text) {
ClipboardManager manager = (ClipboardManager) getActivity()
.getApplicationContext().getSystemService(Context.CLIPBOARD_SERVICE);
manager.setPrimaryClip(ClipData.newPlainText("Copied Text", text));
}

Read clipboard text:

1
2
3
4
5
6
7
8
9
public static String getText() {
ClipboardManager manager = (ClipboardManager) getActivity()
.getApplicationContext().getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = manager.getPrimaryClip();
if (clip != null && clip.getItemCount() > 0) {
return clip.getItemAt(0).coerceToText(getActivity()).toString();
}
return null;
}

Call the getter through Cocos native reflection:

1
2
3
4
5
const text = native.reflection.callStaticMethod(
this._activityName,
'getText',
'()Ljava/lang/String;'
);

Only read clipboard contents in direct response to an appropriate user action and account for platform privacy restrictions.

+