0

I was following below tutorial to check copy text event while the app is background or closed.

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

Now It's not working when the app is closed in android oreo. Is there any alternate of ClipboardMonitorService as background service is removed after API 26.

4

3 回答 3

1

作为 Android Oreo 的一部分,对后台服务有一些限制。我不认为你的问题可以解决。请参阅此帖子以了解更多信息。该帖子中解释了所有不同类型的执行模型。我知道我没有太多帮助,但我想我会分享我所知道的。

于 2018-09-10T14:19:41.903 回答
0

从任务管理器关闭应用程序后,参考广播接收器在棒棒糖中不起作用

请看以下内容,

Android广播接收器未在应用程序关闭时执行

我还认为您可能想了解如何设置优先级。请阅读以下内容,

AndroidManifestIntentFilter_priority

int AndroidManifestIntentFilter_priority 指定处理特定 Intent 的相对重要性或能力。对于接收者,这控制它们执行接收广播的顺序(请注意,对于异步广播,此顺序被忽略)。对于活动,这提供了有关活动处理意图的程度的信息;当多个活动匹配一个意图并具有不同的优先级时,只有具有较高优先级值的活动才会被视为匹配。

仅当您确实需要强加接收广播的某些特定顺序,或者想要强制放置活动以始终优先于其他活动时才使用。该值是一个整数,数字越大越好。

必须是整数值,例如“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 为目标的应用程序。但是,用户可以从“设置”屏幕为任何应用程序启用这些限制,即使该应用程序没有以 O 为目标。

Android 8.0(API 级别 26)还包括对特定方法的以下更改:

  • 如果面向 Android 8.0 的应用尝试在不允许创建后台服务的情况下使用该方法,则 startService() 方法现在会引发 IllegalStateException。
  • 新的 Context.startForegroundService() 方法启动前台服务。即使应用在后台,系统也允许应用调用 Context.startForegroundService()。但是,应用程序必须在服务创建后五秒内调用该服务的 startForeground() 方法。

有关详细信息,请参阅后台执行限制。

剪贴板管理器

剪贴板服务的接口,用于在全局剪贴板中放置和检索文本。

ClipboardManager API 本身非常简单:它包含以原子方式获取和设置当前主要剪贴板数据的方法。该数据表示为 ClipData 对象,该对象定义了应用程序之间的数据交换协议。

有关更多信息,请访问一次https://developer.android.com/reference/android/content/ClipboardManager

于 2018-09-17T06:51:04.943 回答
0

JobScheduler 是最好的选择。您可以设置 15 分钟的时间间隔,它会在每 15 分钟后重新安排您的工作。我知道这不会像服务一样工作,但您可以通过适当优化它来使用它。

于 2019-10-09T20:12:52.257 回答