我正在研究 xamarin.forms。(仅在android中面临以下问题)
当我的应用程序启动时,它会检查我的 GPS 位置是否打开或关闭。
要检查 GPS 位置的开启或关闭,我正在使用依赖服务。
public static bool CheckGPSConnection()
{
var gpsConnection = DependencyService.Get<IGPSConnectivity>();
return gpsConnection.CheckGPSConnection();
}
当我来到应用程序的主页时,我输入了以下代码
if (Device.OS == TargetPlatform.Android)
{
if (!App.CheckGPSConnection())
{
bool answer = await DisplayAlert("Alert", "Would you like to start GPS?", "Yes", "No");
if (answer)
{
Android.App.Application.Context.StartActivity(new Android.Content.Intent(Android.Provider.Settings.ActionLocationSourceSettings));
}
}
}
但这给了我一个例外
{Android.Util.AndroidRuntimeException:从调用startActivity()
在 Activity 上下文之外需要 FLAG_ACTIVITY_NEW_TASK
旗帜。这真的是你想要的吗?在
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()
[0x0000c] 在 /Users/…}
我应该怎么办?
这是特定于平台的功能,因此您应该为其创建一个 DependencyService。
就像对于IGPSConnectivity
创建另一个接口。例如ISettingsService
.
public interface ISettingsService
{
void OpenSettings();
}
然后在Android上,这样实现:
public class SettingsServiceAndroid : ISettingsService
{
public void OpenSettings()
{
Xamarin.Forms.Forms.Context.StartActivity(new Android.Content.Intent(Android.Provider.Settings.ActionLocationSourceSettings));
}
}
现在,再次从您的共享 PCL 代码中调用它,就像使用 GPS 连接一样。
DependencyService.Get<ISettingsService>().OpenSettings();
由于您使用的是 DependencyService,因此将注入每个平台的正确实现。所以,没有必要if (Device.OS == TargetPlatform.Android)
当然,除非您出于其他原因这样做。另外,我认为现在这个方法已弃用。你现在应该使用Device.RuntimePlatform == Device.Android
从 Xamarin.Forms 2.3.4 开始。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)