如何在Android应用程序中自动粘贴文本或网址

问题描述 投票:0回答:2

我想在我的Android应用程序中实现一个功能,当我从手机中的任何地方(来自消息、whatsapp或instagram帖子链接)复制一些文本或链接并打开我的应用程序时,所以我希望如果文本在我的剪贴板中。

要求:

  1. 打开 insta 应用程序并复制帖子链接
  2. 返回我的应用程序并自动粘贴复制的链接

如果有人知道这件事请帮助我。

提前致谢。

android clipboard copy-paste
2个回答
0
投票

我找到了在应用程序启动时自动粘贴复制文本的解决方案。

我添加了一个按钮,当单击该按钮时,我从剪贴板粘贴文本。

我们无法直接在 onCreate() 中使用粘贴功能,因此我自动单击按钮并将按钮可见性设置为消失,因为我不向用户显示按钮。

所以我添加了一个处理程序,该处理程序在 2 秒(2000 毫秒)后触发,并在处理程序内部添加了 button.perforClick()。

以下是解决方案代码。

public class MainActivity extends AppCompatActivity {

TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textView = findViewById(R.id.textView);
    Button button = findViewById(R.id.button);
    
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            button.performClick();
        }
    }, 2000);

    button.setOnClickListener(view -> {
        pasteText();
    });
}

private void pasteText() {
    ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
    String pasteData = "";

    // If it does contain data, decide if you can handle the data.
    if (!(clipboard.hasPrimaryClip())) {

    } else if (!(clipboard.getPrimaryClipDescription().hasMimeType(MIMETYPE_TEXT_PLAIN))) {

        // since the clipboard has data but it is not plain text

    } else {

        //since the clipboard contains plain text.
        ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0);

        // Gets the clipboard as text.
        pasteData = item.getText().toString();

        textView.setText(pasteData);
        Log.i("PastedText", "text: " + pasteData);
    }
}

0
投票

这里是getClipboardText方法

private String getClipboardText() {
    ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
    if (clipboard != null) {
        ClipData clip = clipboard.getPrimaryClip();
        if (clip != null && clip.getItemCount() > 0) {
            return clip.getItemAt(0).getText().toString();
        }
    }
    return "";
}

要在 on create 中使用它,请使用延迟的可运行对象,因为如果直接调用它,它可能会返回 null,因为主线程基本上优先考虑 UI 元素

new Handler().postDelayed(new Runnable() { @Override public void run() { editText.setText(getClipboardText()); } },1500);

© www.soinside.com 2019 - 2024. All rights reserved.