尝试使用Xamarin打开GPS设置页面时获取Java.Lang.NullPointerException

时间:2016-05-18 14:05:06

标签: xamarin gps xamarin.android xamarin.forms

如果未启用GPS(在Xamarin内),尝试打开GPS设置页面时出现以下错误:

  

未知标识符:StartActivity

     

未处理的例外:

     

显示java.lang.NullPointerException:

有人可以指导我哪里出错吗?

此我的界面

namespace MyApp
{
    public interface GpsSettings
    {
        void showGpsSettings();
    }
}

这是实施

[assembly: Xamarin.Forms.Dependency(typeof(GpsSettingsImplementation))]
namespace MyApp.Droid
{

    public class GpsSettingsImplementation : Activity, GpsSettings
    {
        public GpsSettingsImplementation()
        {

        }


        public void showGpsSettings()
        {

            var intent = new Intent(Android.Provider.Settings.ActionLocationSourceSettings);
            StartActivity(intent);
        }
    }
}

这就是我点击按钮时调用我的功能的方法

 DependencyService.Get<GpsSettings>().showGpsSettings();

1 个答案:

答案 0 :(得分:0)

  

现有的Activity实例后面还有一些工作要做   它构建时的场景;活动开始于   意图系统(所有活动)将添加一个Context参考   当它们被实例化时它们。此上下文引用用于   StartActivity的调用链。

     

因此,调用后看到了Java.Lang.NullPointerException   Test活动实例上的StartActivity是因为Context   在那个实例里面从未设置过。通过使用new运算符   创建一个你以正常方式规避的活动实例   活动被实例化,使您的实例无效   状态!

参考:https://stackoverflow.com/a/31330999/5145530

可以通过以下方式解决上述错误:

[assembly: Xamarin.Forms.Dependency(typeof(GpsSettingsImplementation))]
namespace MyApp.Droid
{
    public class GpsSettingsImplementation : Activity, GpsSettings
    {
        public GpsSettingsImplementation()
        {

        }


        public void showGpsSettings()
        {

            var intent = new Intent(Android.Provider.Settings.ActionLocationSourceSettings);
            intent.SetFlags(ActivityFlags.NewTask);
            Android.App.Application.Context.StartActivity(intent);

        }
    }
}