批准 Android 上的后台定位?
Posted
技术标签:
【中文标题】批准 Android 上的后台定位?【英文标题】:Approval for background location on Android? 【发布时间】:2021-06-23 04:06:39 【问题描述】:我用 Qt 开发了一个 android 应用程序。前段时间,我从 Play 商店收到一封电子邮件“后台位置批准”。我不熟悉Java,我不明白这个问题。 我的应用仅在应用可见(在前台)时才使用 GPS,但在不可见(背景)时不使用。
我的 Manifest.xml 如下所示:
<uses-sdk android:minSdkVersion="23" android:targetSdkVersion="28"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="com.android.vending.BILLING"/>
现在我在 Play Store 上找到了
...the ACCESS_BACKGROUND_LOCATION permission only affects an app's access to location when it runs in the background.
对我来说,这意味着因为我不使用 ACCESS_BACKGROUND_LOCATION,所以我的应用仅在 GPS 可见(前景)时才使用它。那么问题是什么?谢谢...
【问题讨论】:
这不是一个简单的问题。 Android 10/11 对位置权限的使用有严格的限制。首先阅读这些文档。 support.google.com/googleplay/android-developer/answer/9799150developer.android.com/training/location/permissions#background你用什么android组件来请求GPS?你如何检查你的应用程序是否在后台?请提供您应用的 GPS 订阅代码。 正如我所提到的,我对 Java 并不熟悉。不幸的是,我对我的应用程序中的“GPS 订阅代码”一无所知。这是一个带有 AR 的相机应用程序,因此它需要非常精确的 gps 位置数据。而且我无法检查我的应用程序是否在后台。为什么这不是由 Android 通过 ACCESS_BACKGROUND_LOCATION 权限自动完成的?谢谢... 这些文档应该可以帮助您获得应用所需的位置权限。您不应使用 ACCESS_BACKGROUND_LOCATION 权限。你在 Qt 中使用任何框架吗?请为您提供 gradle 依赖项和 androidManifest.xml 【参考方案1】:我有一个非常相似的问题。我仔细检查了我的 AndroidManifest.xml,里面没有 ACCESS_BACKGROUND_LOCATION。
我使用 C++ 中的 QGeoPositionInfoSource 来获取定期位置更新。我从未调用过必须修复的 stopUpdates() 函数。它必须在应用程序进入后台时调用,例如:onPause。
这是一个非常有用的视频,里面有线索,还有一些其他有用的阅读材料:
https://youtu.be/xTVeFJZQ28c?t=394 https://developer.android.com/training/location/permissions https://youtu.be/xTVeFJZQ28c?t=394 https://developer.android.com/about/versions/oreo/background-location-limits有一个信号QGuiApplication::applicationStateChanged可用于此,示例代码:
if (const auto *const gui =
qobject_cast<const QGuiApplication *const>(qApp))
connect(gui, &QGuiApplication::applicationStateChanged, this,
[&](Qt::ApplicationState state)
switch (state)
case Qt::ApplicationState::ApplicationActive:
source->startUpdates();
break;
default:
source->stopUpdates();
);
source 是 QGeoPositionInfoSource 的指针。
【讨论】:
以上是关于批准 Android 上的后台定位?的主要内容,如果未能解决你的问题,请参考以下文章
cordova-ionic 应用程序在后台进行地理定位 - android 和 ios