繁体   English   中英

使用服务在后台运行应用程序

[英]Run a app in background using service

我是 android 开发的初学者。 我正在尝试开发一个计步器应用程序,即使在应用程序关闭时它也会计算步数。 我正在使用服务,但每当我按下后退按钮时,所有步骤计数都会重置。 我该怎么办? 提前致谢 。

主Activity.class

protected void onCreate(Bundle savedInstanceState) {

   super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    steps=(TextView) findViewById(R.id.step_value);
    distance=(TextView) findViewById(R.id.distance_value);
    skbar=(SeekBar) findViewById(R.id.seekBar1);
    tsen=(TextView) findViewById(R.id.textView1);
    calories=(TextView) findViewById(R.id.calories_value);
    sdf=new SimpleDateFormat("HH:mm:ss");
    try {
        date= sdf.parse(reset_time);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    current=System.currentTimeMillis();
    skbar.setProgress(10);

    skbar.setOnSeekBarChangeListener(onSeekBarListener);
    threshold=10;
    tsen.setTag(String.valueOf(threshold));

    prevy=0;
    presenty=0;
    step=0;

    accelaration=0.00f;
    enableAccelerometer();  
    if(current==set)
    {
        steps.setText(0);
    }
}
public void enableAccelerometer(){        
    sensormanager=(SensorManager) getSystemService(Context.SENSOR_SERVICE);
    sensormanager.registerListener(sensorEventListener, sensormanager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),sensormanager.SENSOR_DELAY_NORMAL);
      }
private SensorEventListener sensorEventListener=new SensorEventListener() { 

@Override
    public void onSensorChanged(SensorEvent event) {
        // TODO Auto-generated method stub
        float x=event.values[0];
        float y=event.values[1];
        float z=event.values[2];

        presenty=y;

        if(Math.abs(presenty-prevy)>threshold)
                {
                    step++;
                    steps.setText(String.valueOf(step));
                    x=step/3;
                    miles=x*(float)0.001;
                    distance.setText(String.valueOf(miles));


                }



                prevy=y;


    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        // TODO Auto-generated method stub

    }
};



private OnSeekBarChangeListener onSeekBarListener=new OnSeekBarChangeListener() {

    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        // TODO Auto-generated method stub
        threshold=skbar.getProgress();
        tsen.setText(String.valueOf(threshold));

    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress,
            boolean fromUser) {
        // TODO Auto-generated method stub

    }
};


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
protected ServiceConnection mServerConn = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder binder) {

    }

    @Override
    public void onServiceDisconnected(ComponentName name) {

    }


};

public void start() {
    // mContext is defined upper in code, I think it is not necessary to explain what is it 
    Intent i=new Intent(this,Myservice.class);
    mContext.bindService(i, mServerConn, Context.BIND_AUTO_CREATE);
    mContext.startService(i);
}

public void stop() {
    mContext.stopService(new Intent(mContext, Myservice.class));
    mContext.unbindService(mServerConn);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    switch(item.getItemId())
    {

    case R.id.reset:
    step=0;
    steps.setText(String.valueOf(step));
    }
    return super.onOptionsItemSelected(item);
}

这是我的 Myservice 课程

public class Myservice extends Service {
@Override
public void onCreate() {
    // TODO Auto-generated method stub
    super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // TODO Auto-generated method stub
    Toast.makeText(this,"Pedometer running",Toast.LENGTH_SHORT).show();
    return START_STICKY;
}
@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    Toast.makeText(this,"Pedometer Stopped",Toast.LENGTH_SHORT).show();
}
@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

}

您正在启动服务,但您正在活动中做所有事情。 所以你在后台所做的一切都应该在服务内部。

你可以从这里开始阅读

也参考这些例子

  1. 伏杰拉
  2. 程序员

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM