2010-11-23 24 views
2

Je suis assez nouveau à ce sujet mais on m'a dit que je pourrais obtenir une bonne aide ici. Un ami et moi jouons avec la création d'applications Android (en utilisant ADT)Impossible d'obtenir des données de l'activité au service

Voici comment nous essayons de faire le programme: dans une activité, un utilisateur définit des valeurs de seuil pour les axes X et Y sur l'accéléromètre. Lorsque l'utilisateur appuie sur le bouton "Démarrer", startService est appelé et démarre TiltService. TiltService est conçu pour fonctionner en arrière-plan toujours sur le téléphone sans interaction de l'utilisateur. TiltService compare constamment le seuil avec les valeurs de l'accéléromètre et vibre s'il est éteint.

Mon problème est que je n'arrive pas à obtenir les données putExtra() correctement. J'ai remplacé le onStartCommand dans mon service, mais je reçois le message "code inaccessible" lorsque j'enregistre le getExtras() dans un bundle.

Voici le code correspondant (je peux poster le tout, ne veulent pas encombrer la page)

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; 
    } 

Je croyais avoir compris la base de la façon dont Intents pourrait transmettre des données, mais je suppose que non. Est-ce évident ce que je manque? Merci pour toute aide

Répondre

3

mettez l'instruction return dans votre onstartcommand à la dernière ligne de la fonction.

+0

Ok, je l'ai ajouté (comme START_STICKY) qui est ce que j'ai besoin selon http://developer.android.com/reference/android/app/Service.html –

+0

Désolé, n'a pas vu votre déclaration START_STICKY. Dans ce cas, il vous suffit de supprimer la première déclaration de retour. – xandy

+0

Génial, merci! –

1

Je pense que vous devriez utiliser thresholdData.getString(forwardThreshold) pour obtenir les données.