현재 자신의 위치와 지정위치를 비교하여 일치할 경우 알람이 울리는 코드를 테스트하고 있습니다.
run() 함수는 service에 속해있습니다.
if (isEntering) {
Intent alarmIntent = new Intent(compareLT.this, AlarmWindow.class);
alarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
alarmIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
alarmIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pi = PendingIntent.getActivity(compareLT.this, 0, alarmIntent, 0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 3000, 1000, pi);
이 부분이 일치할경우 AlarmWindow 엑티비티를 호출하는 부분인데 그냥 단순히
startActivity(alarmIntent); 하면 화면이 뜨긴하는데 어플을 종료하면 작동이 안되더라구요.
그래서 지금 구현하려는 것이 어플을 종료해도 작동할 수 있도록 pendingIntent alarmManager를 이용하여 위와 같이 코드
를 작성해보왔는데, 실행해보니 위치가 일치하게되면 그냥 죽어버리더라구요. 안드로이드 입문이라서 모르겠어요 ㅠ
이것만 해결하면 되는데 ㅠㅠ 도와주세요~
public void run() {
Log.i(TAG, "스레드시작");
for (int idx = 0; mQuit == false; idx++) {// 디비에서 위치를 꺼내다가 현재위치와
// 현재시간과 비교.
Log.i(TAG, "스레드안에서 포문돌기" + i);
i++;// 로그용..
listDB.open();
c = listDB.getMode(1);
mode = c.getInt(1);
// /커서를 처음부터 끝까지 돌면서 하나하나 비교.
c = listDB.getList();
Log.i(TAG, "커서연결");
while (c.moveToNext()) {
Log.i(TAG, "in while");
if (!ISSTART) {
compareLocation(); //위치비교함수 일치할경우 isEntering --> true값
if (isEntering) {
Intent alarmIntent = new Intent(compareLT.this, AlarmWindow.class);
alarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
alarmIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
alarmIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pi = PendingIntent.getActivity(compareLT.this, 0, alarmIntent, 0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 3000, 1000, pi);
stopSelf();
ISSTART = true;
} else if (!isEntering) {
//modeChange.mode(0);
ISSTART = false;
}
} else if (ISSTART) {
//modeChange.mode(0);
ISSTART = false;
}
}// end while
try {
Thread.sleep(5000);// 비교 시간간격(현재 10초)
} catch (Exception e) {
}
listDB.close();
}// end for
}
}