Java 使用服务在后台运行应用程序
我是android开发的初学者。我正在尝试开发一个计步器应用程序,即使在应用程序关闭时也会计算步数。我正在使用服务,但每当我按下“后退”按钮时,所有步骤都会计数重置。我该怎么办?提前谢谢 主课Java 使用服务在后台运行应用程序,java,android,service,Java,Android,Service,我是android开发的初学者。我正在尝试开发一个计步器应用程序,即使在应用程序关闭时也会计算步数。我正在使用服务,但每当我按下“后退”按钮时,所有步骤都会计数重置。我该怎么办?提前谢谢 主课 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); steps=(TextV
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;
}
}您正在启动服务,但您正在做活动中的所有事情。因此,您在后台所做的任何事情都应该在服务内部 你可以开始阅读了 也请参考这些示例
您应该删除这个mContext.stopService(newintent(mContext,Myservice.class));从onStop()到后台运行服务,请先阅读本文。你想知道的关于服务的一切就是我把电话拔了。但它仍然不起作用。现在该服务将在后台运行为什么我得到了否决票?所以我必须在Myserice类中使用OnSensorchenglistner?如果你想在后台访问它,你必须非常感谢你,很抱歉我无法投票给你的答案。如果它回答了你的问题,你可以接受答案