2014-07-14 6 views
0

가속도계를 사용하기 위해 android에서 백그라운드 서비스를 실행하는 방법은 무엇입니까?가속도계를 사용하기 위해 android에서 백그라운드 서비스를 실행하는 방법은 무엇입니까?

가속도계 값을 감지하기 위해 이미 수신기를 잡고 있습니다. 하지만 이것을 백그라운드 서비스에 추가하고 싶습니다. 그래서 애플 리케이션도 죽인 다음 값을 얻을 것이다.

이 문제에 대한 해결책을 알려주십시오.

모든 사례는 높이 평가됩니다 !!!

답변

0

이미 가속도계 값을 수신하기 위해 수신기를 사용하고 있습니다. 따라서 Service을 작성하여 SensorEventListener을 구현하고 이미 수행 한 것처럼이 수신기를 등록하십시오.

<service android:name=".YourService" 
     android:process=":accel_monitor> 
</service> 
3

안녕하세요 여기 내 소스 :

그러나에 대한 응용 프로그램이 사망 한 후에도 실행중인 서비스를 유지, 난 당신이 다른 프로세스로 서비스를 실행하는 사용자의 AndroidManifest.xml에 이런 식으로 뭔가를 삽입해야한다고 생각 코드를 확인하십시오.

public MyService() { 
} 

@Override 
public IBinder onBind(Intent intent) { 
    // TODO: Return the communication channel to the service. 
    throw new UnsupportedOperationException("Not yet implemented"); 
} 

int count = 1; 
private boolean init; 
private Sensor mySensor; 
private SensorManager SM; 
private float x1, x2, x3; 
private static final float ERROR = (float) 7.0; 
private static final float SHAKE_THRESHOLD = 15.00f; // m/S**2 
private static final int MIN_TIME_BETWEEN_SHAKES_MILLISECS = 1000; 
private long mLastShakeTime; 
private TextView counter; 

@Override 
public void onCreate() { 

} 

@Override 


public void onSensorChanged(SensorEvent event) { 
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 
     long curTime = System.currentTimeMillis(); 
     if ((curTime - mLastShakeTime) > MIN_TIME_BETWEEN_SHAKES_MILLISECS) { 

      float x = event.values[0]; 
      float y = event.values[1]; 
      float z = event.values[2]; 

      double acceleration = Math.sqrt(Math.pow(x, 2) + 
        Math.pow(y, 2) + 
        Math.pow(z, 2)) - SensorManager.GRAVITY_EARTH; 
      Log.d("mySensor", "Acceleration is " + acceleration + "m/s^2"); 

      if (acceleration > SHAKE_THRESHOLD) { 
       mLastShakeTime = curTime; 
       Toast.makeText(getApplicationContext(), "FALL DETECTED", 
         Toast.LENGTH_LONG).show(); 
      } 
     } 
    } 
} 


public int onStartCommand(Intent intent, int flags, int startId) { 
    Toast.makeText(this, "Start Detecting", Toast.LENGTH_LONG).show(); 
    SM = (SensorManager) getSystemService(SENSOR_SERVICE); 
    mySensor = SM.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
    SM.registerListener(this, mySensor, SensorManager.SENSOR_DELAY_NORMAL); 

    //here u should make your service foreground so it will keep working even if app closed 


    return Service.START_STICKY; 

}