2017-03-04 6 views
1

Ich möchte in der Aktivität meinen eigenen Dienst (RadarService) finden - um zu überprüfen, ob der Dienst läuft oder nicht.Wie finde ich meinen eigenen Service?

Allerdings ist die Benennung, ähm, ein bisschen verwirrend und ich bin verloren. Um einen Dienst zu starten ich schaffen Absicht:

this.radarIntent = new Intent(this, typeof(RadarService)); 

Also versuchte ich den Namen des Dienstes von dieser Absicht zu extrahieren und verwenden Sie es zum Vergleich - aber Class Eigenschaft gibt den Namen der Klasse der Absicht selbst , Type Eigenschaft ist leer.

Ok, also habe ich versucht, typeof(RadarService).ToString() zu verwenden - das gebe mir die Zeichenfolge MyNamespace.RadarService, nett. Aber als ich versuchte, es mit der Liste der laufenden Dienste übereinzustimmen, scheiterte ich, weil mein Dienst als md5--here-comes-md5-hash--.RadarService aufgeführt ist (es wird als ClassName und ShortClassName in ActivityManager.RunningServiceInfo festgelegt).

Also, wie finde ich meinen eigenen Service heraus?

Antwort

3

typeof wird den C# Typ/Namen geben, möchten Sie die automatisch generierte JavaAndroid Callable Wrapper Klasse dieses Typs C#, so dass Sie seine CanonicalName bekommen.

Java.Lang.Class.FromType(typeof(StackOverFlowService)).CanonicalName) 

Beispiel:

var intent = new Intent(this, typeof(StackOverFlowService)); 
StartService(intent); 

var serviceName = Java.Lang.Class.FromType(typeof(StackOverFlowService)).CanonicalName; 
var manager = (ActivityManager)GetSystemService(ActivityService); 
foreach (var item in manager.GetRunningServices(int.MaxValue)) 
{ 
    if (item.Service.ClassName == serviceName) 
     Log.Debug("SO", "Service is running!!!"); 
} 

können Sie vermeiden, dass die Auto-MD5-basierte Java-Klasse Namensgebung, dass Xamarin.Android tut durch hartzucodieren einen Namen über die Name Parameter auf dem ACW-basierte Klassenattribut:

[Service(Label = "StackOverFlowService", Name="com.sushihangover.WickedApp.StackOverFlowService")] 
[IntentFilter(new String[] { "com.sushihangover.StackOverFlowService" })] 
public class StackOverFlowService : Service 
{ 
~~~ 
} 

Jetzt wäre Ihr Service-Java-Klassenname com.sushihangover.WickedApp.StackOverFlowService anstelle von md58b0fd40f68fa0d8c16b76771789ed62a.StackOverFlowService

+0

Vielen Dank! Auch für die Info über Attribute für den Dienst. – greenoldman

Verwandte Themen