2010-08-22 62 views
0

嗨,我正在从传感器收集数据并将一个快速傅立叶变换保存到数据库的服务,但是当我按下红色电话按钮(使屏幕变成黑色)时不要保存任何东西。任何想法?将我的Android服务与db连接

另外我注意到,当我停止服务时,它会继续读取传感器,我该怎么办?

这是我用来连接和启动服务的代码:

private ServiceConnection mConnection = new ServiceConnection() { 
     public void onServiceConnected(ComponentName className, IBinder service) { 
      myService = (IMyService) service; 
      myService.set(toRec,CAMPIONI_FFT); 
     } 

     public void onServiceDisconnected(ComponentName className) { 
     } 
    }; 

    void doBindService() { 
     bindService(new Intent(SensorsState.this, 
       SensorService.class), mConnection, Context.BIND_AUTO_CREATE); 
     mIsBound = true; 
    } 

    void doUnbindService() { 
     if (mIsBound) { 
      // Detach our existing connection. 
      unbindService(mConnection); 
      mIsBound = false; 
     } 
    } 
    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     doUnbindService(); 
    } 

这是我的服务(公共recClass RECC;是管理DB类):

public class SensorService extends Service implements SensorEventListener { 
private static final String TAG = "MyService"; 
private MyServiceBinder myServiceBinder = new MyServiceBinder(); 
private SensorManager mSensorManager; 
public float[] dataBuffer; 
public boolean mIsStarted = false; 
public FourierClass fft; 
public recClass recc; 
public String toRec; 
public int camp; 
MediaPlayer player; 

@Override 
public IBinder onBind(Intent intent) { 
    return myServiceBinder; // object of the class that implements Service interface. 
} 
public class MyServiceBinder extends Binder implements IMyService { 
    public void set(String tr, int cp) { 
     toRec = tr; 
     camp = cp; 
     fft = new FourierClass(camp); 
     mIsStarted = true; 
    } 
} 
@Override 
public void onCreate() { 
    Log.d(TAG, "onCreate"); 


    // Get the SensorManager 
    mSensorManager= (SensorManager) getSystemService(SENSOR_SERVICE); 
    mSensorManager.registerListener(this, 
      mSensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0), 
      SensorManager.SENSOR_DELAY_NORMAL); 

    recc = new recClass(this); 
    recc.open(); 
} 

@Override 
public void onDestroy() { 
    Log.d(TAG, "onDestroy"); 
    mIsStarted = false; 
    recc.close(); 
} 

@Override 
public void onStart(Intent intent, int startid) { 
    Log.d(TAG, "onStart"); 
    mIsStarted = true; 
} 
@Override 
public void onSensorChanged(SensorEvent event) { // SensorEventListener 
    Sensor sens = event.sensor; 
    if ((sens.getType() == Sensor.TYPE_ACCELEROMETER) && mIsStarted){ 
      fft.add((float)Math.sqrt((event.values[0]*event.values[0])+(event.values[1]*event.values[1])+(event.values[2]*event.values[2]))); // Add value to the fft 
      dataBuffer = fft.calculate(); 
      if (dataBuffer != null){ 
       for (int i=0; i<fft.camp;i++){ 
        if (toRec != getString(R.string.nuovo)) 
         recc.addValue(toRec, dataBuffer[i]); 
       } 
      } 
    } 
} 

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

} 

}

感谢

瓦莱里奥

回答

1

你需要一个唤醒锁定见this tutorial的细节

+0

但如果我尝试播放一首歌曲是边玩边屏幕是黑的,为什么它不保存到数据库,但它播放的歌曲? – Skatephone 2010-08-23 12:42:23

+0

我试过这个: pm =(PowerManager)getSystemService(Context.POWER_SERVICE); wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,“wlTag”); wl.acquire(); 但它崩溃wl.acquire(); – Skatephone 2010-08-23 16:01:56

+0

PS:我在我的清单中添加了并且它不会崩溃,但它不会将数据保存到db – Skatephone 2010-08-23 16:43:00