【问题标题】:Android: Get foreground app info from service every time a particular app enters foregroundAndroid:每次特定应用程序进入前台时从服务获取前台应用程序信息
【发布时间】:2017-03-13 08:17:36
【问题描述】:

我一直在尝试编写一个库,以后可以将其用于我的其他应用程序。问题是,

一旦我的应用程序(主应用程序)说我的库要监控它。每次应用程序(主应用程序)进入前台时,图书馆都必须进行检查。并且每次它必须显示一个锁定屏幕。所有这些都必须在图书馆处理。

我的方法:我尝试通过在意图服务中使用 getRunningTasks 来获取正在运行的任务信息。但是这种方法已从棒棒糖中弃用。 (我需要解决这个问题。)

注意:我不想每次任何应用程序进入前台时都检查。如果有办法在我的应用程序进入前台时获得通知将很有帮助(所有处理都应该在库中进行,我的主应用程序只会说监控或不监控,即布尔值就是这样)。

提前致谢。

【问题讨论】:

  • @EugenPechanec 正如我所提到的,我不想在我的主应用程序中添加任何代码行。但我认为当我使用 registerActivityLifecycleCallbacks 时,我可能需要在我的主应用程序中编写代码,以便将我的回调接收到我的库中。如果我误解了,请您详细说明您的方法。
  • 您可以向您的库(服务)发送消息,告知您的应用程序在您的应用程序的前台。活动生命周期中有回调,该活动现在在前面。

标签: android performance android-permissions android-library intentservice


【解决方案1】:

您可以注册Application.ActivityLifecycleCallbacks,每次发生此类事件时都会通知您。

何时何地在不接触应用模块的情况下注册回调?编写一个自定义的无操作内容提供程序。默认情况下,内容提供程序仅在应用程序的主进程中运行,无论如何,所有 UI 都应该在其中。

class MyInitProvider : ContentProvider() {
    override fun onCreate(): Boolean {
        val app = context.applicationContext as Application

        // Do what you need to do here.

        return false // Indicate the provider is not to be used further.
    }

    // All other abstract method implementations return either 0 or null.
}

在库AndroidManifest.xml中注册内容提供者:

<application>
    <provider
        android:name=".MyInitProvider"
        android:authorities="${applicationId}.mylibraryinitprovider"
        android:exported="false"/>
</application>

阅读有关内容提供商的更多信息:https://developer.android.com/reference/android/content/ContentProvider.html

回调在主线程上调用。不要在那里做繁重的工作。

【讨论】:

  • 为了清楚起见,我应该把所有这门课都写到我的图书馆里,这就是你的建议吧?
  • 1.) 你能告诉我如何在我的库中注册 Application.ActivityLifecycleCallbacks,这样我就可以在我的应用程序进入前台时接收回调。 2.) 每次从应用程序回调接收到回调时,是否都会调用此内容提供程序?
  • 1) developer.android.com/reference/android/app/… 2) 否。在应用启动时(Application.onCreate 之前)设置一次内容提供程序。如果您在此处注册回调,它们将被注册一次。
  • 如果我需要显示锁定屏幕,即使应用程序从后台恢复(即从正在运行的应用程序列表)。在那种情况下,这个内容提供者不会被调用吗?
  • 我们被告知Application.onCreate 是在我们的应用程序中运行的第一件事。那么内容提供者在此之前被初始化。你没有比这更多的控制权了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
  • 1970-01-01
  • 2016-10-01
相关资源
最近更新 更多