我想在我的Android应用程序中实现一个功能,当我从手机中的任何地方(来自消息、whatsapp或instagram帖子链接)复制一些文本或链接并打开我的应用程序时,所以我希望如果文本在我的剪贴板中。
要求:
如果有人知道这件事请帮助我。
提前致谢。
我找到了在应用程序启动时自动粘贴复制文本的解决方案。
我添加了一个按钮,当单击该按钮时,我从剪贴板粘贴文本。
我们无法直接在 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);
}
}
这里是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);