別のスレッドでGPSを使用して現在の位置を取得する必要があります。次のコードバックグラウンドスレッドでGPS測位を開始するにはどうすればよいですか?
答えて
GPSは非同期に別のスレッドを呼び出す必要はありませんが、GPSは位置を取得する際にユーザーインターフェイスをフリーズしません。最適なのは、progressDialogを使用して、positionを取得した後にprogressDialogを閉じることです。
研究、
public class LocListener implements LocationListener {
private static double lat =0.0;
private static double lon = 0.0;
private static double alt = 0.0;
private static double speed = 0.0;
public static double getLat()
{
return lat;
}
public static double getLon()
{
return lon;
}
public static double getAlt()
{
return alt;
}
public static double getSpeed()
{
return speed;
}
@Override
public void onLocationChanged(Location location)
{
lat = location.getLatitude();
lon = location.getLongitude();
alt = location.getAltitude();
speed = location.getSpeed();
}
@Override
public void onProviderDisabled(String provider) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
}
は今のスレッドでGPSを開始するため、このコードを使用します。
new Thread (new Runnable()
{
public void run()
{
locationManager = (LocationManager) getSystemService (Context.LOCATION_SERVICE);
locationListener = new LocListener();
locationManager.requestLocationUpdates (LocationManager.GPS_PROVIDER, 0, 0, locationListener);
}
}).start();
同じプロシージャを使用しましたが、エラーが発生しました.Looper.prepare()を呼び出さなかったスレッド内でハンドラを作成できません。 – DevAndroid
こんにちはArjun、いくつかのコードの書式を修正しました。正しく表示されます。 –
@DevAndroidあなたの質問にLogcatエラーを投稿してください。 –
private void turnGPSOn(){
String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
if(!provider.contains("gps")){ //if gps is disabled
final Intent poke = new Intent();
poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");
poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
poke.setData(Uri.parse("3"));
sendBroadcast(poke);
}
}
private void turnGPSOff(){
String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
if(provider.contains("gps")){ //if gps is enabled
final Intent poke = new Intent();
poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");
poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
poke.setData(Uri.parse("3"));
sendBroadcast(poke);
}
}
- 1. Javaでメインスレッドをブロックしないバックグラウンドスレッドを開始するにはどうすればよいですか?
- 2. MDIでマウスイベントを開始するにはどうすればよいですか?
- 3. Windowsでサブプロセスを開始するにはどうすればよいですか?
- 4. アイドル状態の優先順位で.NETプロセスを開始するにはどうすればよいですか?
- 5. 継続タスクインスタンスを開始するにはどうすればよいですか?
- 6. ブルートゥースペアリングのプロセスを開始するにはどうすればよいですか?
- 7. Javaプログラミングを開始するにはどうすればよいですか?
- 8. アクティビティを開始するにはどうすればよいですか?
- 9. Hadoopのマップを開始するにはどうすればよいですか?
- 10. nsisのショートカットの開始位置を変更するにはどうすればよいですか?
- 11. ASC3(ActionScript 3)フレームの開始時にリスニングを開始するにはどうすればよいですか?
- 12. フラスコにバックグラウンドスレッドを追加するにはどうすればよいですか?
- 13. ボタンクリックでGPS位置を取得するにはどうすればよいですか?
- 14. divの別の位置から開始するにはどうすればいいですか
- 15. カラーピケットダイアログを開始するにはどうすればいいですか?
- 16. マルチスレッドアプリケーションでキャッシュパフォーマンスを測定するにはどうすればよいですか?
- 17. 「電話サービス」(電話バンキングなど)の開発を開始するにはどうすればよいですか?
- 18. OS Xから「測定単位」設定を取得するにはどうすればよいですか?
- 19. UBUNTU 9.04でCUDA開発を開始するにはどうすればよいですか?
- 20. AndroidでSkypeアプリケーション開発を開始するにはどうすればよいですか?
- 21. iPhone向けに開発を開始するにはどうすればよいですか?
- 22. Scalaを使用してWebの開発を開始するにはどうすればよいですか?
- 23. 最大値ではなく0からカウンタを開始するにはどうすればよいですか?
- 24. forループを1ではなく01で開始するにはどうすればよいですか?
- 25. box.netのリンクを予測するにはどうすればよいですか?
- 26. バックグラウンドプログラムのコードカバレッジを測定するにはどうすればよいですか?
- 27. EDI 837 Professionalの開発を開始するにはどうすればよいですか?
- 28. System.Diagnostics.Process.Start()で開始されたコンソールアプリケーションのウィンドウタイトルを指定するにはどうすればよいですか?
- 29. アプリでサウンドを再生するためにバックグラウンドスレッドをスケジュールするにはどうすればよいですか?
- 30. Rubyで測定単位を使用するにはどうすればいいですか?
試したことはありますか? – BoltClock