Слушатель смены клипа буфера обмена не работает, когда приложение закрыто в Android Oreo - PullRequest
0 голосов
/ 06 сентября 2018

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

https://github.com/twaddington/Android-Clipboard-Monitor/blob/master/src/com/example/clipboardmonitor/service/ClipboardMonitorService.java

Теперь это не работает, когда приложение закрыто в Android Oreo. Есть ли альтернатива ClipboardMonitorService, так как фоновая служба удаляется после API 26.

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Ссылка на Приемник не работает в леденце после закрытия приложения из диспетчера задач

Пожалуйста, смотрите следующее,

Приемник Android Broadcast не выполняется при закрытии приложения

Я также думаю, что вы можете прочитать о том, как установить приоритет. Пожалуйста, прочитайте следующее,

AndroidManifestIntentFilter_priority

int AndroidManifestIntentFilter_priority Укажите относительную важность или умение обращаться с конкретным Намерением. Для приемников, это контролирует порядок, в котором они выполняются, чтобы получить широковещательный (обратите внимание, что для асинхронных широковещательных игнорируются). Для деятельности это дает информацию о том, насколько хорошо деятельность обрабатывает Намерение; когда несколько действий соответствуют намерения и имеют разные приоритеты, только те, с более высоким значение приоритета будет считаться совпадением.

Используйте только если вам действительно нужно навязать какой-то определенный порядок, в котором трансляции получены или хотят принудительно разместить всегда быть предпочтительнее других. Значение представляет собой одно целое число, с большее число считается лучшим.

Должно быть целочисленным значением, например, "100".

Это также может быть ссылка на ресурс (в форме «@ [package:] type: name») или атрибут темы (в форме «? [package:] [type:] name»), содержащее значение этого типа.

Это соответствует приоритету символа ресурса глобального атрибута.

Постоянное значение: 2 (0x00000002)

Как подсказывают различные посты и блоги, я пытался использовать

  1. Intent.Flag_Include_Stopped_Packages
  2. получатель android: process = ": remote" в манифесте
  3. получатель android: exported = "true" в манифесте
In Manifest:

<receiver android:name=".BroadcastReceiver" android:enabled="true"
  android:exported="true" 
  android:process=":remote">
</receiver>

И в соответствии с Изменения поведения Android 8.0

Фоновые пределы выполнения

В качестве одного из изменений, которые вносит Android 8.0 (уровень API 26), чтобы улучшить время автономной работы, когда ваше приложение переходит в состояние кэширования без активных компонентов, система освобождает любые блокировочные функции, которые удерживает приложение.

Кроме того, для повышения производительности устройства система ограничивает определенные действия приложений, которые не работают на переднем плане. В частности:

  • Приложения, работающие в фоновом режиме, теперь имеют ограничения на то, насколько свободно они могут получить доступ к фоновым службам.
  • Приложения не могут использовать свои манифесты для регистрации наиболее скрытых трансляции (то есть трансляции, которые не нацелены конкретно на приложение). По умолчанию эти ограничения применяются только к приложениям, которые цель О. Однако пользователи могут включить эти ограничения для любого приложения с экрана настроек, даже если приложение не настроено на O.

Android 8.0 (уровень API 26) также включает следующие изменения в определенных методах:

  • Метод startService () теперь генерирует исключение IllegalStateException, если приложение, ориентированное на Android 8.0, пытается использовать этот метод в ситуации когда не разрешено создавать фоновые сервисы.
  • Новый метод Context.startForegroundService () запускает передний план оказание услуг. Система позволяет приложениям звонить Context.startForegroundService (), даже когда приложение находится в фон. Тем не менее, приложение должно вызвать эту услугу Метод startForeground () в течение пяти секунд после создано.

Для получения дополнительной информации см. Фоновые пределы выполнения.

ClipboardManager

Интерфейс службы буфера обмена для размещения и извлечения текста в глобальном буфере обмена.

API ClipboardManager очень прост: он состоит из методов атомарно получить и установить текущие данные первичного буфера обмена. Тот данные выражаются в виде объекта ClipData, который определяет протокол для обмен данными между приложениями.

Для получения дополнительной информации, пожалуйста, посетите один раз https://developer.android.com/reference/android/content/ClipboardManager

0 голосов
/ 10 сентября 2018

В составе Android Oreo было несколько ограничений на фоновые сервисы. Я не думаю, что ваша проблема может быть решена. Пожалуйста, см. Этот пост , чтобы узнать больше. Все различные типы моделей исполнения описаны в этом посте. Я знаю, что мне не особо помогли, но я решил поделиться тем, что знаю.

...