0

我需要在 Mac OS X 上使用 Qt/Qml/Quick 和 C++ 获取设备当前位置信息。我对其进行了测试:

    PositionSource {
        id: src
        updateInterval: 60000
        active: true
        preferredPositioningMethods: PositionSource.AllPositioningMethods


        Component.onCompleted: {
              src.start()
              src.update()
              var supPos  = "Unknown"
              if (src.supportedPositioningMethods == PositionSource.NoPositioningMethods) {
                   supPos = "NoPositioningMethods"
              } else if (src.supportedPositioningMethods == PositionSource.AllPositioningMethods) {
                   supPos = "AllPositioningMethods"
              } else if (src.supportedPositioningMethods == PositionSource.SatellitePositioningMethods) {
                   supPos = "SatellitePositioningMethods"
              } else if (src.supportedPositioningMethods == PositionSource.NonSatellitePositioningMethods) {
                   supPos = "NonSatellitePositioningMethods"
              }
              console.log("Position Source Loaded || Supported: "+supPos+" Valid: "+valid);
        }

        onPositionChanged: {
            var coord = src.position.coordinate;
            console.log("Coordinate:", coord.longitude, coord.latitude);
            backend.longitude = coord.longitude;
            backend.latitude = coord.latitude;
            console.log(src.nmeaSource)
        }
    }

当我在 Qt Creator 上运行它时,我得到这个 ok/cancel 弹出窗口:“TestApp”想要使用您当前的位置。”。如果我点击确定按钮,它可以获得当前设备位置信息(纬度、经度等)。 )

另一方面,当我尝试在终端上运行应用程序(路径:TestApp.app/Content/MacOs/TestApp)或使用“macqdeploy”部署时,没有出现弹出窗口并且无法获取当前位置。

对于部署,我还测试复制所有 Qt/Qml/QuickControl 库/框架以手动捆绑,但它也不起作用。

我应该部署我的应用程序,因此需要位置信息。我怎么解决这个问题?如何再次弹出权限?

谢谢!

编辑:

这是我的 Info.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>LSUIElement</key>
    <string>1</string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string>app2.app always location use</string>
</dict>
</plist>
4

1 回答 1

0

如果您的项目中没有属性列表文件,则需要一个属性列表info.plist文件。我认为从 iOS10 /macOS10 开始,这个文件控制权限。有关详细信息,请参阅 Apple 的 关于 Info.plist 键和值的指南 。

就您而言,我认为您的文件中需要此条目info.plist

  <key>NSLocationAlwaysUsageDescription</key>
<string>${PRODUCT_NAME} always location use</string>

以下 SO 帖子可能会有所帮助:

定位服务在 iOS 8 中不起作用

在 info.plist 中添加了 NSLocationAlwaysUsageDescription 字符串

于 2018-01-25T17:20:40.987 回答