0

ユーザーの現在地を 1 時間ごとにサーバーに送信する単純なサービスを実装しようとしています。私のアプリにはログインActivityと設定のアクティビティがあり、通常はバックグラウンドで動作しています。AlarmManager私は自分の目的を達成するために使用し、うまく機能しますがreceiver、アプリを強制的に停止すると機能しません。これを行うための私のコードは次のとおりです。

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毎時間働き続けたい。どうすれば問題を解決できますか?

4

1 に答える 1

0

ユーザーが強制的にアプリケーションを停止すると、Android (バージョン 3.1 以降) はアプリケーションを STOPPED STATE にします (詳細はhttp://commonsware.com/blog/2011/07/13/boot-completed-regression-confirmed.htmlを参照)。アプリケーションは STOPPED STATE でブロードキャストを受信しません。この状態から抜け出すには、アプリケーションをユーザーまたは別のアプリケーションによって明示的に開始する必要があります。

于 2012-10-08T19:01:53.983 に答える