안드로이드 개발 질문/답변
(글 수 45,052)
오늘까지는 마무리 해야하는 작업인데 이래저래 해봐도 잘 안됩니다.
speed 값을 0.1초 단위로 저장을 해서 일정 시간과 속도를 유지시
핸드폰이 흔들렸다고 하고 싶은데..
0.1초로 저장을 하는 부분이 잘 안됩니다.
도와주시면 감사하겠습니다.
스레드를 이용해서 0.1초단위로 저장하려는데..
이부분좀 봐주세요..
그리고 0.1초로 저장한값을
IF문 돌려가며 비교 하고 싶은데
그부분을 어떻게 처리 해야될지도 조언해 주시면 감사하겠습니다.
long currentTime = System.currentTimeMillis();// currentTimeMillis = 현재 시간을 리턴하는 메소드.
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
long gabOfTime = (currentTime - lastTime);
if (gabOfTime > 100) {//최근 측적한 시간과 현재 시간을 비교하여 0.1초 이상되었을 때, 흔듬을 감지합니다
lastTime = currentTime;
x = event.values[SensorManager.DATA_X];
y = event.values[SensorManager.DATA_Y];
z = event.values[SensorManager.DATA_Z];
speed = Math.abs(x + y + z - lastX - lastY - lastZ) /gabOfTime * 10000;
// x, y, z 와 마지막 x, y, z 값의 차이값을 이용한 결과(가속도 센서의 값)
final ArrayList<Float> list = new ArrayList<Float>();
new Thread(){
boolean mLoop = true ;
public void run(){
try {
while(mLoop){
list.add(speed);
Log.e(str, "!!!!!!!!!!!!!!!!!!!!!!");
sleep(100);
}
}
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
안녕하세요(__)
2011.10.20 09:52:33
앞 2줄 순서 바꾸세요....
===>
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
long currentTime = System.currentTimeMillis();
잘 될 것 입니다
2011.10.20 09:54:50
ANR 은 Application Not Response 의 약자입니다. 속칭 뻗었다(?) 죽었다(?) 하면서 뜨는 얼럿 다이얼로그 이구요.
0.1초 동안에 만족하는 속도라.. 쉽지는 않을것 같은데요. 스레드 내에서 구현하지 마시고
센서 이벤트리스너 안에서 구현하시면 될꺼 같습니다.
그리고 해당 시간내 들어온 값들을 저장하시려면 모두 저장은 거의 불가능할꺼 같아보이는데요...
0.1 초면 1분만 해도 600개 데이터이고 좀 위험할듯도 싶습니다.




반드시 0.1초 간격으로 해서 작업을 하셔야 되나요?
어차피 모션이벤트를 받는거 같은데 자체 지원되는 이벤트 리스너에서 가속도값에 따라 처리하시는것도 괜찮을꺼 같은데..
저런식의 쓰레드 작업할 경우 ANR을 무시할수가 없어서 한번 여쭤봅니다.