如何在后台线程中启动 GPS 定位?
Posted
技术标签:
【中文标题】如何在后台线程中启动 GPS 定位?【英文标题】:How to start the GPS positioning in background thread? 【发布时间】:2012-02-04 20:15:27 【问题描述】:我需要在单独的线程中使用 GPS 检索当前位置。
【问题讨论】:
【参考方案1】:学习以下代码,
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() 的线程内创建处理程序 嗨,Arjun,我为您修复了一些代码格式 - 除了添加一些空格以使其正确显示之外,我没有做任何事情。【参考方案2】:GPS 异步工作,您无需在单独的线程中调用,GPS 在获取位置时不会冻结用户界面。最好的是,您可以使用 progressDialog 并在获得职位后关闭 progressDialog。
【讨论】:
【参考方案3】: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);
【讨论】:
以上是关于如何在后台线程中启动 GPS 定位?的主要内容,如果未能解决你的问题,请参考以下文章