我刚开始一个简单的GPS Mock Position应用程序。似乎可以成功发送模拟位置(使用GPS状态应用程序指示我发送的坐标)。但是,一旦我将应用程序切换到另一个应用程序,就好像不再将模拟位置发送到android设备。即当我从应用程序切换到GPS状态页面时,可以看到发送的坐标,但是上次修复的时间戳未更新,并且说GPS处于不活动状态。一旦切换回我的应用程序,位置将再次更新。 在调试模式下,我始终可以看到应用程序的日志输出,而与后台或后台无关。 为了发送该位置,我尝试了几件事。当前状态是服务:
using System;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Locations;
using System.Threading;
using System.Threading.Tasks;
namespace Android_Test
{
[Service]
public class SetLocation : Service
{
public override IBinder OnBind(Intent intent)
{
return null;
}
[return: GeneratedEnum]
public override StartCommandResult OnStartCommand(Intent intent, [GeneratedEnum] StartCommandFlags flags, int startId)
{
Console.WriteLine("SERVICE START");
var cts = new CancellationToken();
Task.Run(async () =>
{
await SendPosition();
}, cts);
return StartCommandResult.Sticky;
}
private async Task SendPosition()
{
while (true)
{
try
{
Console.WriteLine("Send Position ");
var locationManager = (LocationManager)GetSystemService(LocationService);
locationManager.AddTestProvider(LocationManager.GpsProvider, false, false, false, false, false, false, false, Power.Low, Android.Hardware.SensorStatus.AccuracyHigh);
locationManager.SetTestProviderEnabled(LocationManager.GpsProvider, true);
var location = new Location(LocationManager.GpsProvider);
location.Latitude = 10;
location.Longitude = 11;
location.Accuracy = 2;
location.Time = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalMilliseconds;
location.ElapsedRealtimeNanos = Android.OS.SystemClock.CurrentThreadTimeMillis();
location.Speed = 0.0f;
location.Altitude = 1.0;
location.Bearing = 0.0f;
locationManager = (LocationManager)GetSystemService(LocationService);
locationManager.SetTestProviderLocation(LocationManager.GpsProvider, location);
}
catch (Exception ex)
{
Console.WriteLine("ERROR Sending position:" + ex.Message);
}
await Task.Delay(1000);
}
}
}
}
从MainActivity调用哪个
[Activity(Label = "Android_Test", MainLauncher = true)]
public class MainActivity : Activity
{
string logtag = "MainActivity";
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Log.Info(logtag, "#### INIT Android TEST APP ####");
SetContentView(Resource.Layout.Main);
var intent = new Intent(this, typeof(SetLocation));
StartService(intent);
}
}
那我想念的是什么?