Можно ли получить менеджер буфера обмена через фильтр намерений и широковещательный прием?
Можно ли получить скопированный текст через интент-фильтры и широковещательный приемник? Я хочу разработать приложение для словаря, и когда пользователь копирует текст в любое место на своем телефоне, я хочу показать значение текста. В настоящее время я пытался использовать базовую активность для регистрации слушателя, но он не отвечает моим потребностям.
mClipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
listener = new ClipboardManager.OnPrimaryClipChangedListener() {
public void onPrimaryClipChanged() {
performClipboardCheck();
}
};
mClipboard.addPrimaryClipChangedListener(listener);
Благодарю.
3 ответа
Вы можете написать service
проверить буфер обмена и прикрепить приемник к ClipboardManager
там. поэтому класс обслуживания должен быть таким:
class ClipBoardService : Service(), ClipboardManager.OnPrimaryClipChangedListener {
override fun onPrimaryClipChanged() {
val manager = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
if (manager.primaryClip.itemCount > 0) {
val clip = manager.primaryClip.getItemAt(0).text.toString()
toast(clip)
}
}
override fun onBind(intent: Intent): IBinder {
return Binder()
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
initReceiver()
return START_STICKY
}
private fun initReceiver() {
val manager = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
manager.removePrimaryClipChangedListener(this)
manager.addPrimaryClipChangedListener(this)
}
}
и вы можете создать широковещательный приемник с вашим собственным действием и зарегистрировать его в своей деятельности onStart
и отмените регистрацию на активности onStop
а затем в вашем сервисе с помощью sendBroadcast
метод отправить намерение в вашу деятельность
не забудьте объявить службу в вашем файле манифеста
<service
android:name=".clipboard.ClipBoardService"
android:enabled="true"
android:exported="true" />
надеюсь, это было полезно.
Вот как я это сделал, просто сначала откройте свое приложение, а затем закройте его, но вы также можете написать сервис, если хотите продолжить работу
для Java
final ClipboardManager clipboard = (ClipboardManager) this.getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.addPrimaryClipChangedListener( new ClipboardManager.OnPrimaryClipChangedListener() {
public void onPrimaryClipChanged() {
String a = clipboard.getText().toString();
Toast.makeText(getBaseContext(),"Copy:\n"+a,Toast.LENGTH_LONG).show();
}
});
для котлина
clipboard= this.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
clipboard.addPrimaryClipChangedListener (object : ClipboardManager.OnPrimaryClipChangedListener{
override fun onPrimaryClipChanged() {
Log.d(TAG,"Copy:\n= "+clipboard.primaryClip.toString())
}
})
Можно ли получить скопированный текст через интент-фильтры и широковещательный приемник?
Нет.