在安卓系统中如何访问剪贴板数据?

9

如何从剪贴板获取数据并在Toast中显示?我的安卓手机上,在任意编辑文本中,当我长按并复制一些字符串值时,应该弹出一个Toast。我该如何实现这个功能?我找到的每个教程都是针对特定的EditText进行复制操作。我想要的是在我的手机上无论何处复制文本,我只需要访问那个特定的字符串即可...

clipboard.getText();也不起作用。

我尝试过:

public class ClipBoardDataManager extends BroadcastReceiver {

        public ClipBoardDataManager() {
        }

        @Override
        public void onReceive(Context context, Intent intent) {

            String callNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);

            ClipboardManager clipboard = (ClipboardManager) ctx.getSystemService(Context.CLIPBOARD_SERVICE);

            ClipData myClip = ClipData.newPlainText("text", clipboard.getText());
            clipboard.setPrimaryClip(myClip);


            ClipData abc = clipboard.getPrimaryClip();
            ClipData.Item item = abc.getItemAt(0);

            Toast.makeText(ctx,item.toString(),Toast.LENGTH_SHORT).show();


        }
    }

并且注册。
IntentFilter intentFilter1 = new IntentFilter(String.valueOf(Intent.FILL_IN_CLIP_DATA));

ctx.registerReceiver(clipBoardDataManager,intentFilter1);

我还不太明白,请帮助我!


尝试这个:https://dev59.com/-pjga4cB1Zd3GeqPNami#38214507 - Zaki Pathan
它如何保持对我手机上所有edittext的评估?我的Service类没问题吗?我尝试了onPrimaryClipChanged()但不起作用。 - Tapan Patro
@ZakiPathan 对不起兄弟,那时候可能有点问题。现在它已经可以了。输入答案,我会将其标记为正确的。 - Tapan Patro
谢谢。请检查下面的答案。我会给这个问题点赞 ;) - Zaki Pathan
2个回答

12

Java

ClipboardManager clipBoard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
clipBoard.addPrimaryClipChangedListener(new OnPrimaryClipChangedListener() {

    @Override
    public void onPrimaryClipChanged() {
        ClipData clipData = clipBoard.getPrimaryClip();
        ClipData.Item item = clipData.getItemAt(0);
        String text = item.getText().toString();

        // Access your context here using YourActivityName.this
    }
});

Kotlin

val clipBoardManager = context.getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
clipBoardManager.addPrimaryClipChangedListener {
    val copiedString = clipBoardManager.primaryClip?.getItemAt(0)?.text?.toString()
    // Your code
}

希望这可以帮到你


在 Kotlin 版本中,clipBoard 代表哪个变量? - Mark Delphi
@MarkDelphi 我想他们是指将 clipBoard 替换为 clipBoardManager. - Tamarisk
@Tamarisk 是的,那很有道理!谢谢! - Mark Delphi

2

Kotlin

利用扩展函数实现干净、可重用和简单的工作解决方案 -

fun Context.getFromClipBoard() : String? {
    val clipBoardManager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
    return clipBoardManager.primaryClip?.getItemAt(0)?.text?.toString()
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接