C# 无法在后台获取当前位置

C# 无法在后台获取当前位置,c#,android,service,xamarin,location,C#,Android,Service,Xamarin,Location,我想在后台获取位置并将其写入TextView,但什么也做不到。 这是我的代码: MainActivity.cs ... public class MainActivity : Activity { private TextView locationText; private MyService service; protected override void OnCreate(Bundle bundle) { base.OnCreate(bund

我想在后台获取位置并将其写入
TextView
,但什么也做不到。 这是我的代码:

MainActivity.cs

...
public class MainActivity : Activity
{
    private TextView locationText;
    private MyService service;

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.Main);

        locationText = FindViewById<TextView>(Resource.Id.location);

        service = new MyService();
        StartService(new Intent(this,service.Class));

        service.m += service_m;
    }

    private void service_m(object sender, OnLocationChangedEventArgs e)
    {
        locationText.Text += e.Location.Latitude + "," + e.Location.Longitude;
    }
}
。。。
公共课活动:活动
{
私有文本视图位置文本;
私人MyService服务;
创建时受保护的覆盖无效(捆绑包)
{
base.OnCreate(bundle);
//从“主”布局资源设置视图
SetContentView(Resource.Layout.Main);
locationText=FindViewById(Resource.Id.location);
service=newmyservice();
StartService(新意图(这个,service.Class));
service.m+=service\u m;
}
私有无效服务(对象发送方,OnLocationChangedEventArgs e)
{
locationText.Text+=e.Location.Latitude+“,”+e.Location.Latitude;
}
}
MyService.cs和OnLocationChangedEventArgs.cs

...
public class OnLocationChangedEventArgs
{
    Location location;

    public Location Location
    {
        get { return location; }
        set { location = value; }
    }

    public OnLocationChangedEventArgs(Location location)
    {
        this.location = location;
    }
}

[Service]
class MyService : Service
{
    private LocationManager locationManager = null;
    public event EventHandler<OnLocationChangedEventArgs> m;

    public MyService()
    {

    }

    private class MyLocationListener : Java.Lang.Object,ILocationListener
    {
        Location mLastLocation;
        public event EventHandler<OnLocationChangedEventArgs> onLoc;

        public MyLocationListener(String provider)
        {
            mLastLocation = new Location(provider);
        }

        public void OnLocationChanged(Location location)
        {
            mLastLocation.Set(location);
            onLoc.Invoke(this, new OnLocationChangedEventArgs(location));
        }

        public void OnProviderDisabled(string provider)
        {

        }

        public void OnProviderEnabled(string provider)
        {

        }

        public void OnStatusChanged(string provider, [GeneratedEnum] Availability status, Bundle extras)
        {

        }
    }

    private MyLocationListener locationListener = new MyLocationListener("network");

    public override IBinder OnBind(Intent intent)
    {
        return null;
    }

    [return: GeneratedEnum]
    public override StartCommandResult OnStartCommand(Intent intent, [GeneratedEnum] StartCommandFlags flags, int startId)
    {
        return StartCommandResult.Sticky;
    }

    public override void OnCreate()
    {
        base.OnCreate();
        InitializeLocationManager();


        locationManager.RequestLocationUpdates(LocationManager.NetworkProvider, 0, 0, locationListener);

        locationListener.onLoc += MyService_onLoc;
    }

    private void MyService_onLoc(object sender, OnLocationChangedEventArgs e)
    {
        m.Invoke(this,new OnLocationChangedEventArgs(e.Location));
    }

    public override void OnDestroy()
    {
        base.OnDestroy();
        locationManager.RemoveUpdates(locationListener);
    }

    private void InitializeLocationManager()
    {
        if (locationManager == null)
        {
            locationManager = (LocationManager)GetSystemService(LocationService);
        }
    }
}
。。。
公共类OnLocationChangedEventArgs
{
位置;
公共场所
{
获取{返回位置;}
设置{location=value;}
}
公共OnLocationChangedEventArgs(位置)
{
这个位置=位置;
}
}
[服务]
类MyService:Service
{
专用LocationManager LocationManager=null;
公共事件处理程序;
公共MyService()
{
}
私有类MyLocationListener:Java.Lang.Object,ILocationListener
{
位置mLastLocation;
公共事件处理程序onLoc;
公共MyLocationListener(字符串提供程序)
{
mLastLocation=新位置(提供商);
}
已更改位置上的公共无效(位置)
{
mLastLocation.Set(位置);
调用(这个,新的OnLocationChangedEventArgs(位置));
}
公共无效OnProviderDisabled(字符串提供程序)
{
}
公共无效OnProviderEnabled(字符串提供程序)
{
}
public void OnStatusChanged(字符串提供程序,[GeneratedEnum]可用性状态,Bundle extra)
{
}
}
私有MyLocationListener locationListener=新建MyLocationListener(“网络”);
公共覆盖iBind OnBind(意图)
{
返回null;
}
[返回:GeneratedEnum]
公共覆盖StartCommandResult OnStartCommand(意向意向,[GenerateDum]StartCommandFlags标志,int-startId)
{
返回StartCommandResult.Sticky;
}
public override void OnCreate()
{
base.OnCreate();
初始化ElocationManager();
locationManager.RequestLocationUpdate(locationManager.NetworkProvider,0,0,locationListener);
locationListener.onLoc+=MyService\u onLoc;
}
私有void MyService_onLoc(对象发送方,OnLocationChangedEventArgs e)
{
m、 调用(这个,新的OnLocationChangedEventArgs(e.Location));
}
公共覆盖无效OnDestroy()
{
base.ondestory();
locationManager.RemoveUpdate(locationListener);
}
private void InitializeLocationManager()
{
如果(locationManager==null)
{
locationManager=(locationManager)GetSystemService(LocationService);
}
}
}
AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="GoogleMaps.GoogleMaps" android:versionCode="1" android:versionName="1.0" android:installLocation="auto">
    <uses-sdk android:minSdkVersion="16" />
    <application android:label="GoogleMaps">
        <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
        <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="@string/google_maps_key" />
    <service android:name=".MyService" android:process=":my_service" android:enabled="true"/>
    </application>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>

有谁能告诉我我做错了什么,或者有没有更好的方法

更新:


在我的android手机上,我可以看到MyService正在运行,但我不明白为什么屏幕上没有写任何位置。

有人知道为什么会发生这种情况吗?