哪位大佬行行好啊!教我一下Android获取剪切板怎么写

在网上查了一下,按照网上的来写好像都不行,没碰过安卓原生开发的,希望有大佬教教我。

public static ClipboardManager mClipboard = null;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (null == mClipboard) {
        mClipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
    }

}

public static void copyMsgToClipBoard(String msg){
	if (mClipboard != null) {
		ClipData textCd = ClipData.newPlainText("", msg);
        mClipboard.setPrimaryClip(textCd);
	}
}

public static String pasteFromClipboard() {
    String getMsg = "";
    if (!mClipboard.hasPrimaryClip()) {
    	return getMsg;
    }
    ClipData clipData = mClipboard.getPrimaryClip();
    ClipData.Item item = clipData.getItemAt(0);
    if(item != null && item.getText() != null){
    	CharSequence str = item.getText().toString();
        getMsg += str;
        Log.i("cocos", "getMsg FromClipboard is  : " + getMsg);
    }
    return getMsg;
}

喔,谢谢大佬!但是为什么要在onCreate里面执行那段代码呢?

这个会闪退的,在cocos线程获取剪切板内容,需要在android ui线程获取剪切板

public static Semaphore semaphore = new Semaphore(1);
public static String content;
public static String getClipBoardContents(){
    try {
        semaphore.acquire();
    }catch (Exception e)
    {
        e.printStackTrace();
    }

    app.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            log.i("JSContent","1");
            ClipboardManager cm = (ClipboardManager)app.getSystemService(CLIPBOARD_SERVICE);
            if (!cm.hasPrimaryClip()) {
                content = "无内容";
            }
            ClipData data = cm.getPrimaryClip();
            log.i("JSClipBoardContent","2");
            ClipData.Item item = data.getItemAt(0);
            content= item.getText().toString();
            log.i("JSContent",content);

            try {
                semaphore.release();
            }catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    });

    try {
        semaphore.acquire();
    }catch (Exception e)
    {
        e.printStackTrace();
    }
    try {
        semaphore.release();
    }catch (Exception e)
    {
        e.printStackTrace();
    }

    return content;

}
1赞

没搞过java和原生,我这样写是能用的,但是不知道会不会有其他问题

可能是打开方式不一样吧?

当我在APP内设置剪切板内容,再读取剪切板就可以获取,但是我在记事本复制了一段文字,进去APP无法获取剪切板内容,请问这个怎么解决,比较着急~