无法从活动获取数据到服务

问题描述:

我对此很新,但我被告知我可以在这里得到很好的帮助。一个朋友和我自己在玩创造Android应用程序(使用ADT)无法从活动获取数据到服务

以下是我们如何尝试制作程序:在活动中,用户为加速度计上的X轴和Y轴设置阈值。当用户点击按钮“开始”时,启动startService并启动TiltService。

TiltService设计为始终在手机上运行,​​无需用户交互。 TiltService不断地将阈值与加速度计值进行比较,如果它们关闭,则会振动。

我的问题是我似乎无法正确得到putExtra()数据。我已经覆盖了服务中的onStartCommand,但是当我将getExtras()保存到一个包中时,我收到消息“unreachable code”。

下面是相关的代码(我可以张贴整个事情,只是不希望堵塞页)

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

我想我明白了Intents如何传递数据的基本原理,但我想我不知道。这显然是我缺少的东西吗?感谢您的帮助

return声明放入您的onstartcommand函数的最后一行。

+0

好吧,我添加它(作为START_STICKY),这是我需要根据http://developer.android.com/reference/android/app/Service.html – 2010-11-23 03:07:20

我想你应该使用thresholdData.getString(forwardThreshold)来获取数据。