c# - Xamarin 插件地理定位器不适用于 Xamarin Forms android
问题描述
我已经安装了以下 nuget:
- Xamarin.Forms.Maps 版本 => 3.1.0.697729
- Plugin.CurrentActivity => 2.1.0.4
- Xam.Plugin.Geolocator => 4.5.0.6
- Plugin.Permissions => 3.0.0.12
我有以下课程:
public class MainApplication : Application
{
public MainApplication(IntPtr handle, JniHandleOwnershiptranser): base(handle, transer)
{
}
public override void OnCreate()
{
base.OnCreate();
CrossCurrentActivity.Current.Init(this);
}
}
我的 MainActivity 类中有代码:
protected override void OnCreate(Bundle bundle)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(bundle);
Forms.Init(this, bundle);
FormsMaps.Init(this, bundle);
LoadApplication(new App());
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
{
PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
安卓清单
<application android:label="MyApp.Android" android:icon="@drawable/icon">
<meta-data android:name="com.google.android.maps.v2.API_KEY " android:value="AIza..." />
<provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"></meta-data>
</provider>
</application>
Android清单 - 权限
- < 使用权限 android:name="android.permission.ACCESS_FINE_LOCATION" />
- < 使用权限 android:name="android.permission.ACCESS_COARSE_LOCATION" />
- < 使用权限 android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
- < 使用权限 android:name="android.permission.ACCESS_MOCK_LOCATION" />
- < 使用权限 android:name="android.permission.ACCESS_NETWORK_STATE" />
- < 使用权限 android:name="android.permission.ACCESS_WIFI_STATE" />
- < 使用权限 android:name="android.permission.INTERNET" />
我尝试使用元数据 android:name="com.google.android.geo.API_KEY" 而不是元数据 android:name="com.google.android.maps.v2.API_KEY"
在下面添加这一行 < meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
我有一个视图,其中有我的地图:
<ContentPage.Content>
<maps:Map x:Name="Map" />
</ContentPage.Content>
以及背后的代码:
private async Task LoadMap()
{
if (await Utils.Utils.CheckPermissions(Permission.Location))
{
var currentLocation = await CrossGeolocator.Current.GetPositionAsync(TimeSpan.FromSeconds(10));
// MORE CODE
}
}
我从这里获取 api 密钥https://developers.google.com/maps/documentation/android-sdk/signup?hl=en (Maps SDK for Android)
我的 Xamarin Forms 版本是 3.1.0.697729
我创建了另一个空项目,android 上的位置仍然无法正常工作。
在 iOS 中我没有问题。该位置正在工作。
我读了这篇文章,https://jamesmontemagno.github.io/GeolocatorPlugin/GettingStarted.html。
当我运行该应用程序并且下一行代码尝试执行该方法时,它不再执行该方法的以下行。该应用程序可以工作,但不要跳过任何异常。
await CrossGeolocator.Current.GetPositionAsync(TimeSpan.FromSeconds(10));
此行不返回任何内容。
知道为什么会失败吗?
解决方案
推荐阅读
- rust - 如何手动向 lld 提供 core::panicking::panic*?
- javascript - ESLint 为具有单个声明的全局变量抛出 `no-redeclare` 错误
- html - 带有固定元素的响应列
- visual-studio-code - 替换而不找到下一个匹配项
- jquery - 键上的 jquery 脚本允许 2 位小数,不是负数,最大 100
- firebase - 如何为 Firebase Firestore rest api 调用提供身份验证数据
- javascript - 如何修复必须使用导入来加载 ES 模块 discord.js
- java - 没有构造函数或设置器的字段注入
- java - 我可以使用 spring-kafka RecoveringBatchErrorHandler 来处理反序列化异常吗?
- c++ - 如何安全地从内存中清除使用 new 关键字创建的对象(带有属性)?