2012-08-28 4 views
1

사용자가 위치를 기록하는 알람을 추가 할 수있는 Android 응용 프로그램이 있습니다. 예를 들어, 매일 오전 8시에 나는 어디에 있는지 기록하고 싶습니다. 알람이 수신되면 사용자의 위치를 ​​가져 와서 db에 저장하는 서비스를 시작합니다. 이 기능은 앱이 실행 중일 때 (배경 또는 전경) 잘 작동합니다.응용 프로그램이 실행 중일 때만 알람이 수신됩니다.

문제는 내가 작업 관리자로 들어가서 앱을 강제 종료하면 알람이 꺼지지 않는 것 같습니다. 이는 사용자가 휴대 전화를 재부팅하고 앱을 종료 할 수 있기 때문에 중요합니다. 이런 일이 왜

public class AlarmReciever extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle bundle = intent.getExtras();  
     int alarmId = bundle.getInt(Constants.ALARMID_FIELD_NAME); 
     Toast.makeText(context, "Alarm Running: ID = " + alarmId, Toast.LENGTH_LONG).show(); 
     Log.d(TAG, "AlarmReceiver: onRecieve. ID = " + alarmId); 

     Intent serviceIntent = new Intent(context, LocationRecordingService.class); 
     serviceIntent.putExtra(Constants.ALARMID_FIELD_NAME, alarmId); 
     context.startService(serviceIntent); 
    } 
} 

어떤 생각 : 여기

private void setNewAlarm(int hour, int minute, int id) { 
    Intent alarmIntent = new Intent(AutoLoggerActivity.this, AlarmReciever.class); 
    alarmIntent.putExtra(Constants.ALARMID_FIELD_NAME, id); 
    PendingIntent sender = PendingIntent.getBroadcast(AutoLoggerActivity.this, id, alarmIntent, 0); 

    Calendar alarmCal = Calendar.getInstance(); 
    alarmCal.set(Calendar.HOUR_OF_DAY, hour); // set user selection 
    alarmCal.set(Calendar.MINUTE, minute); // set user selection 
    alarmCal.set(Calendar.SECOND, 0); 

    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmCal.getTimeInMillis(), 120000, sender); 
} 

브로드 캐스트 리시버입니다 : 여기

알람을 설정하는 방법은 무엇입니까?

답변

4

이것은 실제로 Android 운영체제의 디자인 기능이며 사용자가 직접 만들 수있는 기능이 아닙니다. "중지됨"상태에있는 응용 프로그램은 브로드 캐스트를 수신 할 수 없습니다. 이 두 가지 조건이 상태가 아니라 :

이 이제까지 시작되기 전에 응용 프로그램이 처음 설치
  1. 사용자가 적극적 설정으로 이동하고 가까운 힘을 수행 할 때

문제는, 작업 관리자에 들어가서 앱을 강제 종료하면 알람이 꺼지지 않는 것입니다. 이는 사용자가 휴대 전화를 재부팅하고 앱을 종료 할 수 있기 때문에 중요합니다.

이것은 사실이 아닙니다. 장치가 다시 부팅되면 응용 프로그램이 "중지됨"상태로 간주되지 않기 때문입니다. 그러나 알람은 재부팅을 지속하지 않으므로 장치가 시작될 때 시스템에서 ACTION_BOOT_COMPLETED 브로드 캐스트를 수신해야 응용 프로그램이 보류중인 알람을 다시 예약 할 수 있습니다.

사용자가 앱을 적극적으로 종료하는 경우 해당 앱을 선택해야합니다.

+0

위대한 정보 주셔서 감사합니다! 소스를 연결할 수 있습니까? –

+0

다음은 기능이 추가 된 Android 3.1 출시 노트의 설명입니다. http://developer.android.com/about/versions/android-3.1.html#launchcontrols – Devunwired

+0

다시 한번 감사드립니다. –

관련 문제