0

私のアプリは、ユーザー定義の間隔で鳴る RTC_WAKEUP アラームをスケジュールします。起動したら、大まかな更新のために位置情報サービスに登録し (都市レベルで十分です)、単一の位置レポートを最大 60 秒待機し、リスナーの登録を解除してから、位置固有の Web クエリを作成し、さまざまな操作を行います。返された情報を含むも​​の。

私は、場所の修正に使用できる少なくともワイヤレス ネットワークが常に存在する環境でテストを行ってきました。この手順はほぼ常に正常に機能しますが、ログによると、アプリが位置情報レポートの待機中にタイムアウトすることがあります。これは、アラームがデバイスをスリープ状態から復帰させ、デバイスがモバイル ネットワーク接続が不安定な建物の奥深くにある場合にのみ発生するようです。このような状況では、ワイヤレス ネットワークが (私が思うに) 位置情報の唯一の可能なソースであるため、(a) アラームによってデバイスがスリープ状態から復帰したとき (誰かが接続?)、または (b) 60 秒では十分な長さではありません。

これらのいずれかが真実であるかどうかを確認できる人はいますか? (a) の場合、「ワイヤレス ネットワークに再接続してから応答してください」というコマンドを発行できますか?

タイムアウト間隔をいじることはできますが、それで問題が解決したように見えても、何が起こっているのかを理解するまで、根本的な原因に本当に対処したとは言えません...


手順に関するいくつかの核心的な詳細: アラームを受信すると、アプリは位置情報サービスIntentServiceに を登録するLocationClientを開始します。次に、wait()あきらめて 60 秒後に失敗を返すループに入ります。次に、クライアントは から を登録しLocationListenerますonConnected()。そのリスナーがレポートを受信するLocationnotifyAll()、待機中のスレッドを保存します。これはどのようにLocationRequest見えるかです (レポートは 1 つだけ必要ですが、できるだけ早くしたいです):

LocationRequest request = LocationRequest.create();
request.setPriority(LocationRequest.PRIORITY_LOW_POWER);
request.setInterval(0);
request.setFastestInterval(0);
request.setNumUpdates(1);
4

1 に答える 1

0

タイトルの質問に対する答えは次のとおりです。いいえ、手動でワイヤレス ネットワークに再接続する必要はありません。システムはこれを自動的に行います (技術的には、これがすべてのバージョンとすべてのデバイスに当てはまるとは約束できないと思います)。

では、実際には何が起こっていたのでしょうか。2つのこと。まず、デバイスは自動的に Wi-Fi に再接続しますが、これは瞬間的なプロセスではありません。ConnectivityManagerインターネットから何かを取得しようとする前に、ライブインターネット接続があると通知されるのを待つ必要がありました. 次に、ワイヤレス ネットワークから位置情報を取得するようにデバイスが構成されていませんでした。当たり前。これら 2 つの問題を修正したので、現在地のリクエストは一貫して成功しています。

于 2014-05-24T15:34:14.020 に答える