Android: Как прослушать события длинного нажатия в любой текстовой области в других приложениях?

#android #copy-paste #long-click

#Android #копировать-вставить #длинный щелчок

Вопрос:

Я пытаюсь разработать приложение для Android, которое предоставляет дополнительную опцию при вставке данных в любом месте.

Я знаю, как захватывать данные из буфера обмена. Мне просто нужно знать, как прослушивать события longclick в любой текстовой области в других приложениях, таких как браузеры, facebook, Twitter … и т.д., Чтобы мое приложение запускалось, предоставляя пользователю возможность вставить данные в буфер обмена после их обработки, в качестве альтернативы вставке обычным способом.

Комментарии:

1. Хм, я почти уверен, что для этого потребуется модифицированная ОС, я не думаю, что менеджер буфера обмена можно заменить как намерение для SMS и тому подобное.

2. Хотя это: dylantaylor.wordpress.com/clippy утверждает, что у него есть служба, которая отслеживает изменения в буфере обмена, вы могли бы сделать то же самое и опубликовать уведомление, которое принимает содержимое буфера обмена.

Ответ №1:

Мы прошли долгий путь с тех пор, как вы задали этот вопрос, но на самом деле есть 2 способа сделать это:

  1. позвоните в to ClipboardManager.addPrimaryClipChangedListener() и зарегистрируйтесь в качестве слушателя, когда пользователь копирует текст. можно найти в документации

  2. Добавьте ACTION_PROCESS_TEXT фильтр намерений, чтобы пользователь мог выбрать созданное вами пользовательское действие / запустить ваше приложение. Больше можно найти в этом сообщении в блоге

Ответ №2:

Вам нужно добавить фильтр намерений к рассматриваемому действию, например:

         <activity android:name=".PostActivity">
            <intent-filter>
              <action android:name="android.intent.action.SEND" />
              <category android:name="android.intent.category.DEFAULT" />
              <data android:mimeType="text/plain" />
            </intent-filter>       
        </activity>
  

Затем вам просто нужно обработать данные, отправленные вам в intent в вашей деятельности

 Uri data = getIntent().getData();
Bundle extras = getIntent().getExtras();
String messageText = "";
if (data != null) {
  messageText = data.toString();
} else if (extras != null) {
  messageText = extras.getString(Intent.EXTRA_TEXT);
}