0

OMGStop() メソッドを次のように変更しました。

public void cancelUpdates() {
    //TODO potential bug here
    if(pi == null)
        setPendingIntent();
    mgr.cancel(pi);     

    //Should one of these work?
    stopService(new Intent(applicationContext, LocationPoller.class));
    stopService(new Intent(applicationContext, LocationPollerService.class));

アクティビティ クラスのメンバーとして pi (PendingIntent) を格納しています。そして、これは AlarmManager から PendingIntent を削除するのにうまく機能します。

でも...

現在地の投票が行われている場合は、停止できるようにしたいと思います。現在の設計で可能ですか?サービスを停止すればよいと思ったのですが、GPS は動作し続けます。

基本的に私がやろうとしているのは、ユーザー(旅行中の私)が設定(タイムアウト、GPSの使用、更新期間など)を変更したときにすべてを停止し、新しい値ですべてを再作成することです。

ありがとう、

ところで素晴らしいコード - クロスカントリーの旅を追跡するためにまさに私が欲しいもの:)

4

2 に答える 2

2

私は同じ問題に直面しました。-時々、マウスポインタを「mgr.setRepeating(..)」にカーソルを合わせて、Eclipse(Indigo)のヒントのいくつかを読みました。「同じIntentSenderにすでにアラームがスケジュールされている場合、最初にキャンセルされます。」しかし、IntentSenderはそれまでになくなる可能性があります。これにより、次の「ソリューション」(元のCommonsWareコード)にたどり着きました。

if(pi == null) {
  Intent i = new Intent(this, LocationPoller.class);
  pi = PendingIntent.getBroadcast(this, 0, i, 0);
  mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
    SystemClock.elapsedRealtime() + 1000, PERIOD, pi);
}
mgr.cancel();

1000ミリ秒を追加することにより、cancel()がヒットする前に、AlarmManagerが起動しないようにしました。

HTH、よろしく。

PS:mparkesを引用したい:「素晴らしいコード」!

于 2012-11-04T19:00:04.967 に答える
0

現在の設計で可能ですか?

いいえ、申し訳ありません。これを追加することは理論的には可能ですが、おそらく少しトリッキーであり、現時点では間違いなくありません。

基本的に私がやろうとしているのは、ユーザー(旅行中の私)が設定(タイムアウト、GPSの使用、更新期間など)を変更したときにすべてを停止し、新しい値ですべてを再作成することです。

それは完全に合理的な概念ですが、それをLocationPollerサポートするものではありません。LocationPollerは、ユーザーがたまたまアプリの UI を操作している間にチェックが行われる可能性が統計的に低い「1 時間ごとにチェックする」ようなシナリオ向けに設計されました。

于 2012-08-21T19:52:49.770 に答える