- ベストアンサー
TimeOutの処理
Androidで定期的にGPSを取得するというプログラムを作成しています。 このGPSなのですが、電波状況が悪いと長時間取得しにいったままになりますし、取得出来ない場合、そのまま終わってしまいます。 できればGPSを取得しに行って、10秒取得が出来なかったらTimeOutとしてエラーの処理を実行したいのですが、どのように実装すればいいのでしょうか?Webを探しましたが、参考になりそうなものが見つけられませんでした。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
noname#161640
回答No.1
そうですね、別にスレッドを走らせ、10秒経過したところでLocationManagerをremoveUpdatesしてからスレッドを終了する、という感じでしょうか。LocationManagerそのものではできないと思いますので……。
お礼
解答ありがとうございます。 戴いたアドバイス通りに、TimeCount用の別スレッドを走らせて希望の処理を実現できました。 ありがとうございました。 同じ問題に当たった方の参考のためにコードを以下に残します。 private Timer locationTimer; private LocationManager mLocationManager; /** * GPS取得のTimeOutを処理するスレッド */ public void timeOutCount() { mTimer = new Timer(true); mTimer.schedule( new TimerTask(){ @Overrid public void run() { andler.post( new Runnable() { public void run() { //onLocationChangedをStopする(GPS取得中断) mLocationManager.removeUpdates(listener); //以下にTimeOut時に行いたい処理を書く //スレッドを止める mTimer.cancel(); } }); } },30000,10000); } //30秒でTimeOutとする //delayミリ秒あとにperiodミリ秒間隔でタスク実行 //ただしTimeOut処理のスレッドなので1回しか実行しない //periodを0秒にすると、エラーになるので便宜上10秒に設定 onLocationChangedが実行された場合、TimeOutのスレッドを停止する。 onLocationChangedの冒頭でmTimer.cancel();を実行。