2010-11-23 14 views
2

Ich bin ziemlich neu, aber mir wurde gesagt, dass ich hier gute Hilfe bekommen könnte. Ein Freund und ich experimentieren mit der Erstellung von Android Apps (mit ADT)Ich kann keine Daten von Activity to Service erhalten

Hier ist, wie wir versuchen, das Programm zu machen: In einer Aktivität setzt ein Benutzer Schwellenwerte für die X- und Y-Achse auf dem Beschleunigungsmesser. Wenn der Benutzer den Knopf "Start" drückt, wird startService aufgerufen und TiltService gestartet.

TiltService wurde entwickelt, um im Hintergrund immer auf dem Telefon ohne Benutzerinteraktion zu laufen. TiltService vergleicht ständig den Schwellenwert mit den Beschleunigungsmesserwerten und vibriert, wenn sie ausgeschaltet sind.

Mein Problem ist, ich kann nicht scheinen, die putExtra() Daten richtig zu bekommen. Ich habe den onStartCommand in meinem Dienst außer Kraft gesetzt, aber ich bekomme die Meldung "unerreichbarer Code", wenn ich die getExtras() zu einem Bundle speichere.

Hier der entsprechende Code ist (ich das Ganze veröffentlichen können, wollen einfach nicht Seite verstopfen)

TiltMeterActivity

private Intent dataIntent = null; 
private float FORWARD_THRESHOLD = 4f; 
private float BACKWARD_THRESHOLD = -3f; 
private float UPWARD_THRESHOLD = 3f; 
private float DOWNWARD_THRESHOLD = -3f; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     bstart = (Button)findViewById(R.id.btnStart); 

     dataIntent = new Intent(); 
     dataIntent.setClass(TiltMeterActivity.this, TiltService.class); 
     dataIntent.putExtra("fowardThreshold", FORWARD_THRESHOLD); 
     dataIntent.putExtra("backwardThreshold", FORWARD_THRESHOLD); 
     dataIntent.putExtra("upwardThreshold", UPWARD_THRESHOLD); 
     dataIntent.putExtra("downwardThreshold", DOWNWARD_THRESHOLD); 

     bStart.setOnclickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       startService(dataIntent); 
      } 
     }); 
    } 

TiltService

private Bundle thresholdData = new Bundle(); 

private float Z_FORWARD_THRESHOLD = 0f; 
private float Z_BACKWARD_THRESHOLD = 0f; 
private float Y_UPWARD_THRESHOLD = 0f; 
private float Y_DOWNWARD_THRESHOLD = 0f; 

public int onStartCommand(Intent intent, int flags, int startId) { 
     // TODO Auto-generated method stub 
     return super.onStartCommand(intent, flags, startId); 


     thresholdData = intent.getExtras(); // The problem area (Eclipse says this is unreachable code) 


     Z_FORWARD_THRESHOLD = thresholdData.getFloat("forwardThreshold"); 
     Z_BACKWARD_THRESHOLD = thresholdData.getFloat("backwardThreshold"); 
     Y_UPWARD_THRESHOLD = thresholdData.getFloat("upwardThreshold"); 
     Y_DOWNWARD_THRESHOLD = thresholdData.getFloat("downwardThreshold"); 

     return START_STICKY; 
    } 

Ich dachte, ich verstanden die Grundlage dafür, wie Intents Daten weitergeben könnten, aber ich denke, das tue ich nicht. Ist es offensichtlich, was ich vermisse? Danke für jede Hilfe

Antwort

3

setzen Sie die return Anweisung in Ihrem onstartcommand auf die letzte Zeile der Funktion.

+0

Ok, ich habe es (wie START_STICKY) hinzugefügt, was ich brauche, nach http://developer.android.com/reference/android/app/Service.html –

+0

Entschuldigung, die START_STICKY-Anweisung wurde nicht angezeigt. In diesem Fall müssen Sie nur die erste Rückgabeanweisung entfernen. – xandy

+0

Super, danke! –

1

Ich denke, Sie sollten thresholdData.getString(forwardThreshold) verwenden, um die Daten zu erhalten.

Verwandte Themen