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

时间:2010-11-23 03:01:58

标签: android service android-intent

我对此很新,但有人告诉我,我可以在这里得到很好的帮助。我和朋友正在玩创建Android应用程序(使用ADT)

以下是我们尝试制作程序的方法:在活动中,用户在加速度计上设置X轴和Y轴的阈值。当用户点击“开始”按钮时,将调用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;
    }

我认为我理解Intents如何传递数据的基础,但我想我没有。我错过了什么?谢谢你的帮助

2 个答案:

答案 0 :(得分:3)

return语句放在函数的最后一行onstartcommand中。

答案 1 :(得分:1)

我认为您应该使用thresholdData.getString(forwardThreshold)来获取数据。