【问题标题】:Is it possible to get logs for when an app is trying to access location while in the background?当应用程序在后台尝试访问位置时,是否可以获取日志?
【发布时间】:2021-04-29 19:52:30
【问题描述】:

Google 不断告诉我我的应用正在后台访问该位置。我的目标是 SDK 29,但我没有 ACCESS_BACKGROUND_LOCATION 权限。我有ACCESS_FINE_LOCATION

我开始认为可能是某个广告网络在后台执行此操作,但我想通过查看日志来确认这一点。有没有办法做到这一点?

编辑:下面关于AppOps 的答案非常有用,但是我已经提交了一个更新,修复了以这种方式发现的每个问题,但我仍然遇到 Play 商店由于后台位置而拒绝更新的问题。那么还有其他方法可以解决这个问题吗?也许在旧版本的 Android 上有些东西?

【问题讨论】:

    标签: android android-permissions android-location


    【解决方案1】:

    如果您可以访问 Android 11 设备,则可以利用 new data access APIs 来了解您的应用中的哪些内容正在使用此类 dangerous 权限。

    this sample project(配置在this book)中,我有一些代码来记录来自所有dangerous 权限使用的堆栈跟踪:

        getSystemService(AppOpsManager::class.java)
          ?.setOnOpNotedCallback(executor, object : AppOpsManager.OnOpNotedCallback() {
            override fun onNoted(op: SyncNotedAppOp) {
              Log.d(TAG, "onNoted: ${op.toDebugString()}")
              RuntimeException().printStackTrace(System.out)
            }
    
            override fun onSelfNoted(op: SyncNotedAppOp) {
              Log.d(TAG, "onSelfNoted: ${op.toDebugString()}")
              RuntimeException().printStackTrace(System.out)
            }
    
            override fun onAsyncNoted(op: AsyncNotedAppOp) {
              Log.d(TAG, "onAsyncNoted: ${op.toDebugString()}")
              RuntimeException().printStackTrace(System.out)
            }
          })
    

    (作为自定义 Application 子类中其他代码的一部分)

    在该示例的上下文中,它将记录应用程序从其视图模型获取位置的事实。但是,这只是基于示例——在一个更大的应用程序中,它会记录来自任何内容的权限使用,包括您的广告网络库。

    【讨论】:

    • 感谢您提供的代码。到目前为止,我只看到了一种后台请求。基本上我一按回家,flurry 就会询问位置。我不确定如何判断这是否被视为背景。
    • @casolorz:这可能是“一个时机问题”,特别是取决于 Flurry 如何检测 HOME 压力以及它正在做什么来响应它。这似乎也很愚蠢——Flurry 是否认为按下 HOME 意味着用户真的会被传送到他们的家或其他什么地方? :-)
    • 所以我踩了他们的代码,当他们请求位置时他们总是得到null,但是如果我添加ACCESS_BACKGROUND_LOCATION并将该权限授予我的应用程序,那么他们就不会得到null .所以我很确定它被认为是后台调用。为了确定,我正在做更多的测试。
    • 我已经修复了 AppsOpsManager 说我在应用程序处于后台时使用位置信息的所有情况,但是在提交新的 apk 后,Play 商店仍然在抱怨它。您能想到的任何其他检查方式吗?特别是在 Android
    • @casolorz:没有什么简单的事情能想到。当您的应用程序在后台运行时,您可以收集 Logcat 一段时间,看看是否有任何迹象表明正在发生的事情。可能有静态 APK 分析器可以尝试识别您的 APK 中使用的 LocationManager
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多