2012-10-08 5 views
0

매 시간마다 사용자의 현재 위치를 서버로 보내는 간단한 서비스를 구현하려고합니다. 내 응용 프로그램은 단지 Activity 로그인하고 활동을 설정하고 일반적으로 백그라운드에서 일하고있다. 내 목적을 달성하기 위해 AlarmManager 사용하고 잘 작동하지만 내 receiver 내 응용 프로그램을 중지하도록 강제 때 작동하지 않습니다. 여기에 제 코드가 있습니다.강제 종료 후 AlaramManager가 작동하지 않습니다.

MyApplication.java

@Override 
    public void onCreate() { 
     super.onCreate(); 
     startService(); 
    } 

    private void startService(){ 
     Intent receiver = new Intent(this, LocationAlaramReceiver.class); 
     PendingIntent intent = PendingIntent.getBroadcast(this, 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT); 

     AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     mgr.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), AlarmManager.INTERVAL_HOUR, intent); 
    } 

의 AndroidManifest.xml

<receiver 
     android:name=".receiver.LocationAlarmReceiver"> 
    </receiver> 

LocationAlarmReceiver.java

public class LocationAlarmReceiver extends BroadcastReceiver 
    { 
    private final static String TAG = "LocationAlarmReceiver"; 

     @Override 
     public void onReceive(Context context, Intent intent) 
      { 
      Log.d(TAG, "=========== onReceive =============="); 
       //Do something later 

      } 
    } 

그냥 내 케이스를보고, 그것은 보일 것 같아요 AlarmManager 항상 호출됩니다. 각 시간당 LocationAlramReceiver을 유지하고 싶습니다. 문제를 어떻게 해결할 수 있습니까?

+0

강제 종료 대화 상자에서 앱이 강제로 정지 된 후 올바르게 작동하거나 신뢰할 수 없다고 표시됩니다. 당신이 스팸 메일을 만들려고하는 것처럼 솔직히 그렇게 기대한다고 생각합니다. –

+0

Noop. 내 앱이 사용 중지 된 휴대 전화에 설치됩니다. 위치를 도움말 센터에 보내면 쉽게 뒤돌아 볼 수 있습니다. 그래서 내 앱은 누군가가 그것을 죽일지라도 항상 백그라운드에서 실행되어야합니다. – sunghun

+0

앱에 펌웨어가 포함되어 있지 않으면이 작업을 수행 할 수 없습니다. 앱을 죽게하고 싶지 않다면, 사용자에게 죽이지 말라. –

답변

0

사용자가 응용 프로그램을 강제 종료하면 Android 3.1 버전 이후로 중지 상태 (자세한 내용은 http://commonsware.com/blog/2011/07/13/boot-completed-regression-confirmed.html)로 변경됩니다. STOPPED STATE 상태에서 응용 프로그램이 브로드 캐스트를받지 못합니다. 이 상태를 벗어나려면 응용 프로그램이 사용자 나 다른 응용 프로그램에 의해 명시 적으로 시작되어야합니다.