如何在 Xamarin Forms 中获取设备的 GPS 位置?

2024-02-06

我想在输入框名为时获取我的设备的经度和纬度实体位置 is focused。我在用Xamarin.Essential 地理定位为了获取我的设备的 GPS 位置,我按照文档和教程进行操作,但仍然无法获取 GPS 位置。我已经在我的 Android 清单中添加了以下权限,但仍然没有任何权限。我收到一条显示警报"Error3", Error3是例外情况无法获取位置.

错误是“Java.Lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.app.Activity.requestPermissions(java.lang.String[],int)”"



我的问题:
1. 我的代码有什么错误?
2. 我可以离线获取我的 GPS 位置吗?如果是,我怎样才能实现这一目标?

使用权限 android:name="android.permission.ACCESS_COARSE_LOCATION"
使用权限 android:name="android.permission.ACCESS_FINE_LOCATION"
使用功能 android:name="android.hardware.location" android:required="false"
使用功能 android:name="android.hardware.location.gps" android:required="false"
使用功能 android:name="android.hardware.location.network" android:required="false"

private async void entLocation_FocusedAsync(object sender, FocusEventArgs e)
    {
        try
        {
            var request = new GeolocationRequest(GeolocationAccuracy.Medium);
            var location = await Geolocation.GetLocationAsync(request);

            if (location != null)
            {
                entLocation.Text = location.Longitude.ToString() + "," + location.Latitude.ToString();
            }
        }
        catch (FeatureNotSupportedException fnsEx)
        {
            await DisplayAlert("Error1", fnsEx.ToString(), "ok");
        }
        catch (PermissionException pEx)
        {
            await DisplayAlert("Error2", pEx.ToString(), "ok");
        }
        catch (Exception ex)
        {
            await DisplayAlert("Error3", ex.ToString(), "ok");
        }
    }

我还在开发我的第一个需要位置权限的 Xamarin 项目。您应该尝试一些可以帮助您获取 GPS 位置的方法。

我的建议

1)您需要授予额外的权限AndroidManifest文件。这些都是

<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

2) Since 安卓6.0以上,你需要有运行时权限。为了实现这一点,你需要覆盖OnStart()方法在你的MainActivity.cs。我参考了Android 6.0 以上版本使用 Xamarin.Forms.Maps 的位置权限 https://stackoverflow.com/questions/48487333/location-permission-for-android-above-6-0-with-xamarin-forms-maps。这是我所做的

protected override void OnStart()
{
    base.OnStart();
    if(CheckSelfPermission(Manifest.Permission.AccessCoarseLocation) != (int)Permission.Granted)
    {
        RequestPermissions(new string[] { Manifest.Permission.AccessCoarseLocation, Manifest.Permission.AccessFineLocation }, 0);
    }

}

重要的:我这里的解决方案只是暂时处理授予权限。当您第一次构建并运行项目时,Visual Studio 会显示异常。当你选择之后"allow" from “允许访问位置吗?”设备上有提示,再次运行项目就不会出现异常。我还没有处理过这个问题。

我的极限

正如我所说,问题还没有完全解决。我的答案是帮助您暂时解决位置权限问题并继续前进。而且我不知道如何离线获取位置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Xamarin Forms 中获取设备的 GPS 位置? 的相关文章

随机推荐

  • “已达到 10 $digest() 迭代。正在中止!”由于使用 angularjs 进行过滤

    看看以下内容 https dl dropbox com u 4571 musicopeTypescript musicopeTypescript index html https dl dropbox com u 4571 musicope
  • WTP - m2e 不部署传递依赖项

    我有一个网络应用程序 其结构如下 A jar gt B war gt C war 我正在使用 Eclipse Juno 和WTP版本是1 1 A jar 是一个工作区实用程序项目 包含在 B war 中 B war 是一个战争项目 作为覆盖
  • RabbitMQ 中的主题交换与直接交换

    我们有一个将使用 RabbitMQ 的应用程序 并且有几个不同的队列用于在层之间传递消息 最初 我计划使用多个直接交换 每种消息类型一个 但看起来使用不同路由键绑定的队列的单个主题交换将实现相同的效果 拥有一个单一的交换似乎也更容易维护 但
  • F# 和 Clojure 调用重新定义函数时的差异

    In F gt let f x x 2 val f int gt int gt let g x f x val g int gt int gt g 10 val it int 12 gt let f x x 3 val f int gt i
  • DwmGetWindowAttribute 使用 PInvoke 返回 0

    我试图通过捕获特定窗口来进行屏幕捕获 并且为了准确地计算出要捕获的窗口的大小 我想使用 DwmGetWindowAttribute 当我在 Windows 10 上使用 PInvoke 调用此函数时Rect即使结果值为 0 成功 结构也始终
  • 简单注入器:如何注入HttpContext?

    我已经开始使用 Simple Injector 作为我的 DI 容器 主要是出于性能原因 如果有人有建议 请告诉我 但我编写的一些类使用 HttpContextBase 作为构造函数参数 我现在已经解决了从构造函数中删除它并创建一个属性的问
  • Amazon S3 签名 URL 和 Cloudfront - 访问被拒绝

    我正在创建一个signed url使用以下内容 AWS ACCESS KEY ID my access key AWS SECRET ACCESS KEY my secret access key KEYPAIR ID my keypair
  • 如何创建堆叠折线图 D3,多个 Y 轴和公共 X 轴

    我正在尝试使用 d3 创建一个折线图 该折线图将有多个 y 轴 但有一个公共 x 轴 有人可以为我提供如何使用 D3 库创建它的示例吗 它应该如下所示 很简单 只需绘制 2 个图表 但仅附加一个 x 轴 这里有一个小提琴可以帮助您入门 ht
  • C++ 无法计算包含向量大小的公式?

    int main vector
  • Visual Studio 使用标准格式复制/粘贴到 Outlook 中?

    我在 Visual Studio 中有包含深色背景的自定义设置 复制 粘贴到 Outlook 会对邮件的白色背景上的代码中的深色背景产生视觉犯罪 有谁知道如何以标准和格式粘贴代码 不是特殊粘贴中的未格式化文本 也不使用我的自定义 VS 格式
  • 如何在滚动运算符中访问多列?

    我想在 pandas 中进行一些滚动窗口计算 需要同时处理两列 我举一个简单的例子来清楚地表达问题 import pandas as pd df pd DataFrame x 1 2 3 2 1 5 4 6 7 9 y 4 3 4 6 5
  • Django 多对多模型 DRF

    我有以下模型结构 class Project models Model author models ManyToManyField Account name models CharField max length 40 default Ne
  • 如何在View和ViewModel之间传递数据

    我是 MVVM 设计模式的新手 我正在尝试创建一个简单的应用程序 其中主窗口中显示学生列表 我希望用户能够将新学生添加到我已完成的列表中绑定学生数据所在的可观察集合 但如何通过从文本框中获取数据并将其用作命令中的参数来创建新用户 这是我的观
  • 如何测试飞行路线迁移?

    通常迁移脚本很简单 例如添加新列等 如果应用程序已部署 则一切正常 但有时需要测试一些复杂的逻辑 推荐的方法是什么 有一个单独的数据库用于测试 将其作为每个构建的一部分进行迁移 并针对它运行测试 您还可以根据需要添加额外的测试数据 包括用于
  • Laravel Sanctum 可以使用 Multiauth 防护

    我正在用 laravel sainttum 进行测试 但这里有一些问题 我正在创建管理员警卫 当我将中间件更改为 auth sanctum admin 它应该只能由管理员访问 但在这里我可以使用带有网络防护的普通用户帐户进行访问 我不知道为
  • 有没有一种方法可以创建一个 pandas 数据框,其行是整数,这些整数会增加直到每行达到某个值?

    例如 假设我有整数数组 5 3 7 6 4 我希望找到一种有效的方法来创建如下所示的 pandas 数据框 数据帧中的第一行应包含数字 1 到 5 第二行应包含数字 1 到 3 依此类推 有没有办法在不循环的情况下实现这一目标 一个简单的单
  • 将枚举值传递给 PowerShell 中的函数

    我有一个接受枚举值作为参数的函数 举个例子 考虑一下这样的事情 PS gt function IsItFriday System DayOfWeek dayOfWeek if dayOfWeek eq System DayOfWeek Fr
  • SQL 行之间的差异

    我有一个像这样的 SQL 2008 数据库表 name score steve 207 steve 205 steve 200 steve 139 我想得到行之间的差异 eqn 行 行 1 所以我理想地希望它是 steve 2 207 20
  • 如何编写 Nexus Rest Api 的 Get 方法?

    I have groupId artifactId and version 如何使用 Nexus Rest API 编写 GET 请求以获得进一步的工件描述 不确定您要查找什么信息 REST API 文档可在此处获取 Core API ht
  • 如何在 Xamarin Forms 中获取设备的 GPS 位置?

    我想在输入框名为时获取我的设备的经度和纬度实体位置 is focused 我在用Xamarin Essential 地理定位为了获取我的设备的 GPS 位置 我按照文档和教程进行操作 但仍然无法获取 GPS 位置 我已经在我的 Androi