2010-11-23 13 views
2

私はこれにはかなり新しいですが、私はここで良い助けを得ることができると言われました。アクティビティからサービスにデータを取得できません

ここでは、私たちがプログラムを作成しようとしていることがあります:アクティビティでは、ユーザが加速度計のX軸とY軸のしきい値を設定します。ユーザが「Start」ボタンを押すと、startServiceが呼び出され、TiltServiceが開始されます。

TiltServiceは、ユーザーの介入なしに常に電話でバックグラウンドで実行されるように設計されています。 TiltServiceは、しきい値と加速度計の値を絶えず比較し、オフの場合は振動します。

私の問題は、putExtra()データを正しく取得できないようです。私のサービスではonStartCommandをオーバーライドしましたが、getExtras()をバンドルに保存すると、 "到達不能なコード"というメッセージが表示されます。ここで

は、関連するコード(私は全部を投稿することができ、単にページを詰まらせるしたくない)

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

である私は、私は理解し考えましたインテントがデータをどのように渡すことができるかの基本ですが、私はそうではないと思います。私が紛失していることは明らかですか?助けをありがとう

答えて

3

returnステートメントをonstartcommandに関数の最後の行に入力してください。

+0

私はhttp://developer.android.com/reference/android/app/Service.html –

+0

に基づいて必要なものを(START_STICKYとして)追加しました。あなたの返品START_STICKYの様子は表示されませんでした。この場合、最初のreturn文を削除するだけで済みます。 – xandy

+0

素晴らしい、ありがとう! –

1

データを取得するにはthresholdData.getString(forwardThreshold)を使用する必要があります。

関連する問題