x y z축 가속도 값이 특정 값 이상이 될 때 토스트를 띄우려고하는데
문제는 서비스를 이용해서 백그라운드에서 가속도가 측정되다가 토스트에 띄우고싶은데
궁금한 것이 서비스를 이용한 백그라운드에서 가속도 측정입니다.
아래 코드는 서비스예제로 "출력테스트"라는 토스트가 5초마다 화면에 보여지게 한 것입니다.
*********************************************************************************
public class NewsService extends Service {
boolean mQuit;
SensorManager mSm;
public void onCreate() {
super.onCreate();
}
public void onDestroy() {
super.onDestroy();
Toast.makeText(this, "Service End", 0).show();
mQuit = true;
}
public int onStartCommand (Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
mQuit = false;
NewsThread thread = new NewsThread(this, mHandler);
thread.start();
return START_STICKY;
}
public IBinder onBind(Intent intent) {
return null;
}
class NewsThread extends Thread {
NewsService mParent;
Handler mHandler;
public NewsThread(NewsService parent, Handler handler) {
mParent = parent;
mHandler = handler;
}
public void run() {
while(mQuit == false)
{
Message msg = new Message();
msg.what =0;
msg.obj = "출력테스트";
mHandler.sendMessage(msg);
try { Thread.sleep(5000);} catch (Exception e) { ; }
}
}
}
Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 0) {
String news = (String)msg.obj;
Toast.makeText(NewsService.this, news, 0).show();
}
}
};
}
********************************************************************************
질문드릴점이 위 코드의 run()함수 안에있는것이 백그라운드에서 작업되다가 출력되는부분같은데
그럼 가속도측정하는 코드를 저 run()함수에 넣는게 맞나요?
제가 가속도측정하는 예제 코드가 따로 있어서 합치려고 하는데 가속도 측정하는 예제가 아래와 같습니다
**********************************************************************************
public class NewsController extends Activity {
SensorManager mSm;
...
...
protected void onResume() {
super.onResume();
int delay = SensorManager.SENSOR_DELAY_UI;
mSm.registerListener(mSensorListener,
mSm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), delay);
}
protected void onPause() {
super.onPause();
mSm.unregisterListener(mSensorListener);
}
SensorEventListener mSensorListener = new SensorEventListener() {
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// 특별히 처리할 필요없음
}
public void onSensorChanged(SensorEvent event) {
// 신뢰성없는 값은 무시
if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE) {
//return;
}
float[] v = event.values;
mTxtAccel.setText("가속 = \n X:" + v[0] + "\n Y:" + v[2] + "\n Z:" + v[1]);
...
...
********************************************************************************************
여기서 문제가 바로 위 코드의 onResume() 와 onPause()는 extends Activity 때문에 사용가능한데
첫번째 서비스하는 예제 부분에는 Activity를 상속받는 부분이 없기 때문에 어떻게 처리를 해야하는지 모르겠습니다.
SensorEventListener이하부터는 약간 수정후 그냥 run()함수에 넣어버려도 무방할꺼같지만
onResume() 와 onPause() 부분은 어떻게 해야하는지 모르겠습니다.
제가 초보라 아에 잘못 생각하고 있는지 모르겠네요
확실히 모르시더라도 방향좀 잡아주세요 ㅠㅠ