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正在运行,但我不明白为什么屏幕上没有写任何位置。有人知道为什么会发生这种情况吗?