无法在后台获取当前位置

时间:2016-06-07 09:18:28

标签: 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(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.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);
        }
    }
}

的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正在运行,但我无法理解为什么屏幕上没有任何位置。

0 个答案:

没有答案