2017-06-23 6 views
0

Ich kann meinen Android-Dienst nicht starten. Ich möchte es in meinem Fragment aufrufen, aber es funktioniert nicht und zeigt keinen Fehler.Android-Dienst funktioniert nicht

Hier ist meine Fragmentklasse. Ich versuche, Service mit diesem Code zu starten:

Activity.StartService(new Intent(Activity, typeof(SimpleStartedService)));

Mein Fragment Code:

class SettingsFragment : Fragment 
{ 
    public override void OnCreate(Bundle savedInstanceState) 
    { 
     base.OnCreate(savedInstanceState); 
    } 

    public static Settings NewInstance() 
    { 
     var settings = new Settings { Arguments = new Bundle() }; 
     return settings; 
    } 

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     var ignored = base.OnCreateView(inflater, container, savedInstanceState); 

     var view = inflater.Inflate(Resource.Layout.settings, null); 

     var btnStartService = view.FindViewById<Button>(Resource.Id.btnStartService); 

     btnStartService.Click += delegate 
     { 
      Activity.StartService(new Intent(Activity, typeof(SimpleStartedService))); 
     }; 

     return view; 
    } 
} 

Hier ist die meinen Dienst. Programm tritt hier nicht ein.

[Service] 
public class SimpleStartedService : Service 
{ 
    static readonly string TAG = "X:" + typeof(SimpleStartedService).Name; 
    static readonly int TimerWait = 4000; 
    Timer timer; 
    DateTime startTime; 
    bool isStarted = false; 

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

    public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId) 
    { 
     Log.Debug(TAG, $"OnStartCommand called at {startTime}, flags={flags}, startid={startId}"); 
     if (isStarted) 
     { 
      TimeSpan runtime = DateTime.UtcNow.Subtract(startTime); 
      Log.Debug(TAG, $"This service was already started, it's been running for {runtime:c}."); 
     } 
     else 
     { 
      startTime = DateTime.UtcNow; 
      Log.Debug(TAG, $"Starting the service, at {startTime}."); 
      timer = new Timer(HandleTimerCallback, startTime, 0, TimerWait); 
      isStarted = true; 
     } 
     return StartCommandResult.NotSticky; 
    } 

    public override IBinder OnBind(Intent intent) 
    { 
     // This is a started service, not a bound service, so we just return null. 
     return null; 
    } 


    public override void OnDestroy() 
    {   
     timer.Dispose(); 
     timer = null; 
     isStarted = false; 

     TimeSpan runtime = DateTime.UtcNow.Subtract(startTime); 
     Log.Debug(TAG, $"Simple Service destroyed at {DateTime.UtcNow} after running for {runtime:c}."); 
     base.OnDestroy(); 
    } 

    void HandleTimerCallback(object state) 
    { 
     TimeSpan runTime = DateTime.UtcNow.Subtract(startTime); 
     Log.Debug(TAG, $"This service has been running for {runTime:c} (since ${state})."); 
    } 
} 
+0

Haben Sie dem Manifest einen Eintrag hinzugefügt? – Sufian

+0

ja, aber immer noch nicht funktioniert – Likya07

+0

Veröffentlichen Sie auch Ihr Manifest. – Sufian

Antwort

0

Die Erklärung in Manifest-Datei muss korrekt sein:

<service android:enabled="true" android:name="<PACKAGE_NAME_HERE.SERVICE_CLASS_NAME_HERE>" /> 

Überprüfen Sie auch für Großschreibung und Lowercaseleeters in Namen, es an beiden Orten gleich sein müssen.

+0

es ist so, aber immer noch funktioniert der Dienst nicht – Likya07

+0

@ Likya07 versuchen, sauber zu bauen, dann. Wenn immer noch nicht, dann deinstallieren Sie die App auch vom Gerät. – Sufian

+0

@Sufian ich sauber bauen und deinstallieren Sie die App und wissen, dass es funktioniert, danke – Likya07

Verwandte Themen