Xamarin/Android - 位置侦听器服务调用错误
Xamarin/Android - Location Listener Service call error
我正在尝试为经度和海拔等位置信息创建一个包装器。我创建了一个从 java.lang.object 扩展并实现 ILocationListener 的 class。然后我创建了一个 service
来创建这个 class 的对象来获取最新的经度和纬度。代码编译没有任何错误。
此处大部分代码来自在线示例。问题是我收到 运行 时间错误,提示 Can't create handler inside thread that has not called Looper.prepare()
请注意这里没有 UI。我确实尝试将 "this" 作为服务的上下文传递,但这没有任何区别。
有人知道为什么我会收到关于 Looper.prepare() 的 运行 时间错误吗?
提前致谢。
public class GeoInfoService : Java.Lang.Object, ILocationListener
{
public GeoInfo GeoInfoResult { get; set; }
[System.ComponentModel.DefaultValue(30000)]
public long MinimumTimeForUpdate { get; set; }
[System.ComponentModel.DefaultValue(1)]
public float MinimumDistanceForUpdate {get; set;}
[System.ComponentModel.DefaultValue(true)]
public bool isProviderEnabled { get; set; }
[System.ComponentModel.DefaultValue("")]
public string Status { get; set; }
[System.ComponentModel.DefaultValue("")]
public string Provider { get; set; }
[System.ComponentModel.DefaultValue(false)]
public bool hasError { get; set; }
public System.Text.StringBuilder lastError { get; set; }
LocationManager locMgr;
string tag = "GeoInfoService";
public GeoInfoService(Context context)
{
lastError = new System.Text.StringBuilder ();
MinimumTimeForUpdate = 2000;
MinimumDistanceForUpdate = 1;
locMgr = context.GetSystemService (Context.LocationService) as LocationManager;
var locationCriteria = new Criteria ();
locationCriteria.Accuracy = Accuracy.NoRequirement;
locationCriteria.PowerRequirement = Power.NoRequirement;// Power.Medium;
string locationProvider = locMgr.GetBestProvider (locationCriteria, true);
Log.Debug (tag, "Starting location updates with " + locationProvider.ToString ());
//THIS IS where we have the error java.lang.RuntimeException
//Can't create handler inside thread that has not called Looper.prepare()
// I also replaced "this" with context that was passed from the service
locMgr.RequestLocationUpdates (locationProvider, MinimumTimeForUpdate, MinimumDistanceForUpdate, this);
}
我离开了 context
丛林。我的意图是创建一个 class,我可以按需更新并获取 location
信息。但这有几个问题,重要的是 location
信息没有缓存,只能通过 onLocationChange
获取。
所以我刚刚创建了一个服务并实现了 ILocation 接口,并在一个地方完成了我的所有逻辑。
我正在尝试为经度和海拔等位置信息创建一个包装器。我创建了一个从 java.lang.object 扩展并实现 ILocationListener 的 class。然后我创建了一个 service
来创建这个 class 的对象来获取最新的经度和纬度。代码编译没有任何错误。
此处大部分代码来自在线示例。问题是我收到 运行 时间错误,提示 Can't create handler inside thread that has not called Looper.prepare()
请注意这里没有 UI。我确实尝试将 "this" 作为服务的上下文传递,但这没有任何区别。
有人知道为什么我会收到关于 Looper.prepare() 的 运行 时间错误吗? 提前致谢。
public class GeoInfoService : Java.Lang.Object, ILocationListener
{
public GeoInfo GeoInfoResult { get; set; }
[System.ComponentModel.DefaultValue(30000)]
public long MinimumTimeForUpdate { get; set; }
[System.ComponentModel.DefaultValue(1)]
public float MinimumDistanceForUpdate {get; set;}
[System.ComponentModel.DefaultValue(true)]
public bool isProviderEnabled { get; set; }
[System.ComponentModel.DefaultValue("")]
public string Status { get; set; }
[System.ComponentModel.DefaultValue("")]
public string Provider { get; set; }
[System.ComponentModel.DefaultValue(false)]
public bool hasError { get; set; }
public System.Text.StringBuilder lastError { get; set; }
LocationManager locMgr;
string tag = "GeoInfoService";
public GeoInfoService(Context context)
{
lastError = new System.Text.StringBuilder ();
MinimumTimeForUpdate = 2000;
MinimumDistanceForUpdate = 1;
locMgr = context.GetSystemService (Context.LocationService) as LocationManager;
var locationCriteria = new Criteria ();
locationCriteria.Accuracy = Accuracy.NoRequirement;
locationCriteria.PowerRequirement = Power.NoRequirement;// Power.Medium;
string locationProvider = locMgr.GetBestProvider (locationCriteria, true);
Log.Debug (tag, "Starting location updates with " + locationProvider.ToString ());
//THIS IS where we have the error java.lang.RuntimeException
//Can't create handler inside thread that has not called Looper.prepare()
// I also replaced "this" with context that was passed from the service
locMgr.RequestLocationUpdates (locationProvider, MinimumTimeForUpdate, MinimumDistanceForUpdate, this);
}
我离开了 context
丛林。我的意图是创建一个 class,我可以按需更新并获取 location
信息。但这有几个问题,重要的是 location
信息没有缓存,只能通过 onLocationChange
获取。
所以我刚刚创建了一个服务并实现了 ILocation 接口,并在一个地方完成了我的所有逻辑。