无法从活动获取数据到服务
问题描述:
我对此很新,但我被告知我可以在这里得到很好的帮助。一个朋友和我自己在玩创造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
函数的最后一行。
答
我想你应该使用thresholdData.getString(forwardThreshold)
来获取数据。
好吧,我添加它(作为START_STICKY),这是我需要根据http://developer.android.com/reference/android/app/Service.html – 2010-11-23 03:07:20