마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

arraylist 읽기 질문

0 추천
private void alramEvent(){
        DBHelper dbHelper = new DBHelper(this);
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        Cursor cursor2 = db.rawQuery("select * from latlonData", null);

        arrayList2 = new ArrayList<>();
        while (cursor2.moveToNext()){
            latlonVO vo = new latlonVO();
            vo.id = cursor2.getInt(0);
            vo.latitude = cursor2.getDouble(1);
            vo.longitude = cursor2.getDouble(2);
            arrayList2.add(vo);
            AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
            if( latitude - 0.00015 <= cursor2.getDouble(1) && cursor2.getDouble(1) <= latitude + 0.00015 &&
                    longitude - 0.0005 <= cursor2.getDouble(2) && cursor2.getDouble(2) <= longitude + 0.0005){
                am.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
            }else{
                am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
            }
        }
    }

조금 읽기 복잡해서 죄송합니다.

arraylist2는 컬럼이 위도, 경도로 이루어진 db구요 여러 개의 데이터가 들어있습니다.

if문 안의 latitude와 longitude는 실시간으로 받아오는 위도, 경도 구요.

 

그래서 10초 간격으로 받아올 때마다 db의 모든 행과 비교를 하여 조건이 만족하면 진동, 아니면 소리 모드로

전환시키고 싶은데요.

 

위의 소스로 하면 db의 행 순서대로 읽으니까 진동과 소리가 계속 서로 번걸아가면서 씹더라구요.

분명히 저렇게 코딩하면 안될 것 같은데 도저히 방법이 안 떠올라 질문드립니다.

 

참고로 위 소스는 액티비티는 아니구 서비스에 포함되어 있는 것입니다.

익명사용자 님이 2018년 7월 16일 질문

1개의 답변

0 추천

조건에 하나라도 만족하면, 진동 모드로 변경해야 하는데, 

다음 DB검색하면서 조건에 만족하지 않을테니.. 

현재 구조로서는 99% 진동 모드로 변경 안되겠네요..

 

array list로 만들 필요가 없는데 사족 코드인듯 하고요..

아래코드와 같이 수정해 주시는게 좋을 듯 합니다.

 

private void alramEvent(){
    DBHelper dbHelper = new DBHelper(this);
    SQLiteDatabase db = dbHelper.getWritableDatabase();
    Cursor cursor2 = db.rawQuery("select * from latlonData", null);

    boolean isVibrateMode = false;

    while (cursor2.moveToNext()){
        int curId = cursor2.getInt(0);
        double curLatitude = cursor2.getDouble(1);
        double curLongitude = cursor2.getDouble(2);

 
        if( latitude - 0.00015 <= curLatitude && curLatitude <= latitude + 0.00015 &&
            longitude - 0.0005 <= curLongitude && curLongitude <= longitude + 0.0005){
            isVibrateMode = true;
            break;
        }
    }

    AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
    if(isVibrateMode) {
        am.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
    } else {
        am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
    }        

}

익명사용자 님이 2018년 7월 16일 답변
아 boolean으로 해결하는 방법이 있었네요. 감사합니다 ㅠㅠ
...