2010-08-22 5 views
0

안녕하세요. 저는 센서에서 데이터를 수집하고 빠른 푸리에 trasform을 db에 저장하는 서비스를하고 있습니다.하지만 빨간색 전화 버튼을 누르면 (화면이 검게 나타납니다) 아무것도 저장하지 마십시오. 어떤 생각?내 안드로이드 서비스를 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

WakeLock이 필요합니다. 자세한 내용은

+0

입니다.하지만 화면이 검정색 인 동안 노래를 재생하려고하면 왜 그 노래가 db에 저장되지 않고 노래가 재생됩니까? – Skatephone

+0

나는 이것을 시도했다 : 오후 = (PowerManager) getSystemService (Context.POWER_SERVICE); wl = pm.newWakeLock (PowerManager.PARTIAL_WAKE_LOCK, "wlTag"); wl.acquire(); 하지만 wl.acquire()에서 충돌합니다. – Skatephone

+0

추신 : 내 매니페스트에 을 추가했으나 충돌이 발생하지 않지만 데이터를 db에 저장하지 않습니다. – Skatephone

관련 문제