Android:每次特定应用进入前台时从服务获取前台应用信息

Android: Get foreground app info from service every time a particular app enters foreground

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

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

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

注意:我不想每次都检查任何应用是否进入前台。如果有一种方法可以在我的应用程序进入前台时得到通知将会有所帮助(所有处理都应该在库中进行,我的主应用程序只会说监视或不监视,即一个布尔值)。

提前致谢。

您可以注册 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

回调在主线程上调用。那里不要干重活。